
私は CentOS7 マシンで作業しており、マシンの openssl バージョンを 1.0.2k -> 1.1.0l にアップグレードしようとしています。アップグレード後に、サーバー (変更されていない) とのハンドシェイク プロセスが失敗するようで、原因を突き止めようとしています。
両方の openssl バージョンで次のコマンドを実行します。
openssl s_client -showcerts -connect サーバー:ポート
新しい方では失敗しました (-CAfile 検証を指定した場合、両方で機能します)。結果の差分:
古い 1.0.2k (ハンドシェイク成功):
サーバー一時キー: ECDH、P-256、256 ビット新規、TLSv1/SSLv3、暗号は ECDHE-RSA-AES128-GCM-SHA256 新規 1.1.0l (ハンドシェイクに失敗):
サーバー一時キー: X25519、253 ビット新規、TLSv1.2、暗号は ECDHE-RSA-AES128-GCM-SHA256 検証戻りコード: 20 (ローカル発行者証明書を取得できません) 違いを理解し、なぜ異なるのかについて助言していただければ幸いです。
ちなみに、私はここで同様の脅迫を始めました: https://stackoverflow.com/questions/68763253/openssl-upgrade-fail-validating-certificate?noredirect=1#comment121583146_68763253 あまり運がなかった。
ありがとう :)
答え1
Centos 7 では、次のコマンドでこの問題を解決することもできます。
#Prepare to compile
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
yum groupinstall -y "Development Tools" "Development Libraries"
#Build from source
cd /usr/src
# --no-check-certificate because of that issue, your system will not validate letsencrypt certificate at openssl.org until finish update
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar -zxf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config
make
make install
yum install ca-certificates -y
答え2
今後の参考のために、ここに解決策を追加します。
opensslバージョン1.0.2k以上で作業を開始するとの上centos7 マシンでは、ルート解決パスの動作が変更されているようです。
Openssl は、証明書ストアの場所の定義済みリストを調べますが、/val/ssl で cert.pem ファイルに遭遇すると、それをテストし、リモートを検証できない場合は失敗します。
私の「有効な」証明書は /etc/ssl にあり、クライアントのマシンであったため、/var/ssl ファイルを削除するように依頼することはできませんでした。
私の解決策は、openssl が失敗した場合に備えて、プログラムで正しい cert.pem を選択することでした (マシンの openssl バージョンを変更せずに、これは禁止されていました)。