私は、HockeyApp というクラウド アプリケーションからアクセスしたい、Debian サーバー上で実行中の Jira インスタンスを持っています。問題は、HockeyApp が Jira のプロジェクト リストにアクセスしようとしたときに発生します (エラーなしで失敗します)。そこで、Jira API をチェックし、HockeyApp バックエンドから呼び出されると予想されるメソッドを見つけました。
Chrome を使用して API にアクセスすると、https://jira.company.com/rest/api/latest/project
期待どおりの結果が json として返されます。ただし、Postman、curl、または httpie からこの API を呼び出そうとすると、毎回エラーが発生します。
curl は私にこう言います:
curl: (60) SSL証明書の問題: ローカル発行者証明書を取得できません 詳細はこちら:https://curl.haxx.se/docs/sslcerts.html
curl はサーバーの正当性を検証できなかったため、サーバーへの安全な接続を確立できませんでした。この状況の詳細と解決方法については、上記の Web ページをご覧ください。
そこで、最新の cacert-2018-10-17.pem ファイルをダウンロードして、もう一度試してみました。運がありませんでした。SSL-k
検証を無視するオプションを追加すると、期待どおりの結果が得られました。
Postman の設定で SSL 検証をオフにすると、期待どおりの結果が得られます。ただし、サーバーは自己署名 SSL 証明書を使用していません。証明書は次のようになります。
証明書は、すべてのブラウザ、Bitbucket や Confluence などの他の接続されたアプリケーションで正常に動作しています。
この問題の原因をどうやって調べればよいですか?
答え1
さらに調査を進めた結果、ようやく問題の原因が分かりました。
Wireshark を使用して cURL から REST 呼び出しを実行するときにネットワーク トラフィックを調べ始めたところ、証明書が確かに不良であることがわかりました。Chrome は問題にしていないだけです。
そこで私は次の方法で証明書を確認しました:
openssl s_client -showcerts -connect jira.company.com:443
次のように応答します。
Start Time: 1544006181
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
結局、私のサーバーで使用されている証明書は完全な認証チェーンを提供していないことがわかりました。これが、一部のクライアントがそれを拒否する理由です。
私は、CRT ファイルを 1 つの company.com.pem ファイルにコピーする完全なチェーンを含むように JKS を変更しました (詳細な説明はこちら:https://www.digicert.com/ssl-support/pem-ssl-creation.htm)
-----BEGIN CERTIFICATE-----
(MyCompany.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Intermediate.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root.crt)
-----END CERTIFICATE-----
そして、jiraインストール用の新しいJKSを作成しました。
openssl pkcs12 -export -in company.com.pem -name tomcat -out jira.p12
keytool -importkeystore -srckeystore jira.p12 -srcstoretype pkcs12
-destkeystore jira.jks -deststoretype JKS