問題の再現:
centos7 のデフォルトの openssl バージョンは 1.1.0k であるため、メディア サービスをコンパイルするときは openssl バージョン 1.1.1 以降が必要です。以前に削除された openssl の下位バージョンはすべて手動で 1.1.1k バージョンにコンパイルされており、メディア サービスは正常に実行され、CA は正常に検証します。
その結果、サーバーの電源がオフになり、昨夜再起動された後、Telecom MQ データを取得しているときに、openssl がハンドルされない例外というエラーを報告し続けました。
openssl コマンドを使用して、接続ステータスをテストします。
openssl s_client -connect msgpush.ctwing.cn:16651
次の結果が得られます。
ローカル証明書をロードできなかったことを示すプロンプトが表示されます。さまざまなソリューションを使用し、さまざまなバージョンの openssl をコンパイルした後も、依然として動作しません。
必死の思いで、オンライン環境(オンラインはクラウドサーバー、opensslは1.02K)のopensslとローカルサーバーのopensslの違いを分析することしかできず、数時間の苦痛を経験しました。最後に、openssl のバージョンを確認するコマンドでヒントを見つけました。このコマンドは非常に重要です。
openssl バージョン -d
結果はオンラインで印刷されます:
ローカルサーバーの結果:
オンライン環境のディレクトリに入ります openssl: コマンドを実行します
ll
結果を示す:
重要な点はこのディレクトリです。赤でマークした部分を参照してください。ここのソフト リンクは証明書の場所です。
もう一度ローカルサーバーを見てみましょう
証明書のソフトリンクが見られないことがわかりますが、
すべての理由はここにあります。openssl で使用される証明書の場所をシステムに伝えることができないからです。したがって、ソフトリンクを作成できます。
ln -s /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem cert.pem
実行結果は以下の通りです。
openssl test コマンドを再度使用すると、成功、
シナリオ 2:
上記の処理を実行した後も、検証に失敗することがわかります。
コマンドを使用する
openssl cert.pem を検証する
ファイルをロードできない、指定されたファイルが見つからないというメッセージが表示されます。
まず、openssl のインストール パスが /usr/local/lib64 ディレクトリにあるかどうかを確認します。そのようなフォルダーがないことを確認した後、ファイルは /usr/local/lib ディレクトリにインストールされます。 ld.so.cnf のパスが /usr/local/lib に変更されます
コマンドを再度使用して検証しても失敗し、証明書をロードできません
比較後、tls-ca-bundle.pem ファイルは空になっており、証明書の生成時の構成に問題がある可能性があります。
他のサーバーの信頼できる証明書のコピーをコピーしたところ、検証は成功しました。
他のコマンド
openssl バージョン -a
net 5.0 ベースの centos 7 で ssl ハンドシェイクの失敗を促す解決策
# Add this in the head of the file
openssl_conf = openssl_init
#
# skip
#
# And the following in the end of the file
[openssl_init]
ssl_conf = ssl_config
[ssl_config]
system_default = tls_defaults
[tls_defaults]
CipherString = @SECLEVEL=2:kEECDH:kRSA:kEDH:kPSK:kDHEPSK:kECDHEPSK:-aDSS:-3DES:!DES:!RC4:!RC2:!IDEA:-SEED:!eNULL:!aNULL:!MD5:-SHA384:-CAMELLIA:-ARIA:-AESCCM8
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256
MinProtocol = TLSv1.2
質問リンク:
ローカル証明書のロードに失敗する問題を解決するには、次の記事を参照してください。