この話の背景は、いくつかのSOAP/WSDLアプリケーション開発にopensslでgSOAPを使用していることです。最終的なアプリケーションは、組み込みARMデバイス用にクロスコンパイルする必要があります。
ビルドシステム(Fedora 17 x64)ではすべて正常に動作しますが、ターゲットデバイス(ARM / Montavista 5)でクロスコンパイルされたバージョンを実行すると、次のエラーが発生します。
エラー:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました
私はOpenSSLを調べて、これを絞り込むことができるかどうかを確認し始めました。ビルドシステムと組み込みシステムでは、検証が失敗する原因となる動作が明らかに異なります。
両方で次のコマンドを実行しました(IPアドレスはgoogle.comです)。
openssl s_client -showcerts -connect 173.194.67.104:443 -verify 9
さまざまなマシンでの出力を以下に示します。どちらの場合もopenssl1.0.1cを実行しています。特に、ターゲット(ARM)システムは、異なる証明書チェーンを受信/解釈しているようです。
なぜ出力が違うのかわかりません。ビルドマシンと同じ方法で、ターゲットデバイスに証明書を正しく検証させる方法を誰かが説明できますか?
ビルド(Fedora)マシンからの出力:
深さが9であることを確認します
接続済み(00000003)
深さ=2C = US、O = "VeriSign、Inc。"、OU=クラス3パブリックプライマリ認証局
返品を確認する:1
深さ=1C = ZA、O = Thawte Consulting(Pty)Ltd.、CN = Thawte SGC CA
返品を確認する:1
深さ=0C = US、ST =カリフォルニア、L =マウンテンビュー、O = Google Inc、CN = www.google.com
返品を確認する:1
---
証明書チェーン
0秒:/ C = US / ST = California / L = MountainView / O = Google Inc / CN = www.google.com
i:/ C = ZA / O = Thawte Consulting(Pty)Ltd./CN=Thawte SGC CA
-----証明書の開始-----
[簡潔にするために削除]
-----証明書の終了-----
1秒:/ C = ZA / O = Thawte Consulting(Pty)Ltd./CN=Thawte SGC CA
i:/ C = US / O = VeriSign、Inc./OU=Class 3 Public Primary Certification Authority
-----証明書の開始-----
[簡潔にするために削除]
-----証明書の終了-----
---
サーバー証明書
subject = / C = US / ST = California / L = Mountain View / O = Google Inc / CN = www.google.com
発行者=/C = ZA / O = ThawteConsulting(Pty)Ltd./CN=Thawte SGC CA
---
クライアント証明書のCA名は送信されません
---
SSLハンドシェイクは1907バイトを読み取り、299バイトを書き込みました
---
新しい、TLSv1 / SSLv3、暗号はRC4-SHAです
サーバーの公開鍵は1024ビットです
安全な再ネゴシエーションがサポートされています
圧縮:なし
拡張:なし
SSLセッション:
プロトコル:TLSv1
暗号:RC4-SHA
セッションID:C05953342AC01E9AB63CF0BABBE942B4E29061AA4904C3F1393EBBB1548B0254
Session-ID-ctx:
マスターキー:38B97C0CC2795AD1D3EEACAE244E33F1E5A0988AE9182AC85DFFF5B6BFAE6585E6BCF763E1E0EB300CD38B87CC0F2501
Key-Arg:なし
Krb5プリンシパル:なし
PSK ID:なし
PSK IDヒント:なし
TLSセッションチケットの有効期間のヒント:100800(秒)
TLSセッションチケット:
[簡潔にするために削除]
開始時間:1347036912
タイムアウト:300(秒)
リターンコードの確認:0(ok)
ターゲット(ARM)マシンからの出力
深さが9であることを確認します
接続済み(00000003)
深さ=1C = ZA、O = Thawte Consulting(Pty)Ltd.、CN = Thawte SGC CA
エラーを確認してください:num = 20:ローカル発行者証明書を取得できません
返品を確認する:1
深さ=1C = ZA、O = Thawte Consulting(Pty)Ltd.、CN = Thawte SGC CA
エラーの確認:num = 27:証明書が信頼されていません
返品を確認する:1
深さ=0C = US、ST =カリフォルニア、L =マウンテンビュー、O = Google Inc、CN = www.google.com
返品を確認する:1
---
証明書チェーン
0秒:/ C = US / ST = California / L = MountainView / O = Google Inc / CN = www.google.com
i:/ C = ZA / O = Thawte Consulting(Pty)Ltd./CN=Thawte SGC CA
-----証明書の開始-----
[簡潔にするために削除]
-----証明書の終了-----
1秒:/ C = ZA / O = Thawte Consulting(Pty)Ltd./CN=Thawte SGC CA
i:/ C = US / O = VeriSign、Inc./OU=Class 3 Public Primary Certification Authority
-----証明書の開始-----
[簡潔にするために削除]
-----証明書の終了-----
---
サーバー証明書
subject = / C = US / ST = California / L = Mountain View / O = Google Inc / CN = www.google.com
発行者=/C = ZA / O = ThawteConsulting(Pty)Ltd./CN=Thawte SGC CA
---
クライアント証明書のCA名は送信されません
---
SSLハンドシェイクは2130バイトを読み取り、443バイトを書き込みました
---
新しい、TLSv1 / SSLv3、暗号はECDHE-RSA-RC4-SHAです
サーバーの公開鍵は1024ビットです
安全な再ネゴシエーションがサポートされています
圧縮:なし
拡張:なし
SSLセッション:
プロトコル:TLSv1.2
暗号:ECDHE-RSA-RC4-SHA
セッションID:AA9E7D7AD223F18241A210D224B8BEF4A441572C1A9719BF3504FB03297D85DE
Session-ID-ctx:
マスターキー:7A15F2071D50C076C0524AAD45857C5683212370582AD7D9F882B64104F0A0A8C2948B8B85C1EC19015C
51CAC30D4A05
Key-Arg:なし
PSK ID:なし
PSK IDヒント:なし
SRPユーザー名:なし
TLSセッションチケットの有効期間のヒント:100800(秒)
TLSセッションチケット:
[簡潔にするために削除]
開始時間:1347036508
タイムアウト:300(秒)
戻りコードの確認:27(証明書は信頼されていません)