这个故事的背景是我将 gSOAP 与 openssl 一起用于一些 SOAP/WSDL 应用程序开发。最终的应用程序必须针对嵌入式 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
下面列出了不同机器上的输出。在这两种情况下,我都在运行 openssl 1.0.1c。特别是目标(ARM)系统似乎接收/解释不同的证书链。
我不知道为什么输出不同。有人可以解释一下我如何能够让我的目标设备以与构建机器相同的方式正确验证证书吗?
构建(Fedora)机器的输出:
验证深度为 9 已连接(00000003) depth=2 C = US, O = "VeriSign, Inc.", OU = Class 3 Public Primary Certification Authority 验证返回:1 depth=1 C = ZA, O = Thawte Consulting (Pty) Ltd., CN = Thawte SGC CA 验证返回:1 depth=0 C = 美国,ST = 加利福尼亚,L = 山景城,O = Google Inc,CN = www.google.com 验证返回:1 --- 证书链 0 秒:/C=US/ST=加利福尼亚/L=山景/O=Google Inc/CN=www.google.com i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA -----开始证书----- [为简洁起见删除] -----结束证书----- 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority -----开始证书----- [为简洁起见删除] -----结束证书----- --- 服务器证书 主题=/C=US/ST=加利福尼亚/L=山景/O=Google Inc/CN=www.google.com 发行人=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA --- 未发送客户端证书 CA 名称 --- SSL 握手已读取 1907 个字节并写入 299 个字节 --- 新的,TLSv1/SSLv3,密码是 RC4-SHA 服务器公钥为 1024 位 支持安全重新协商 压缩:无 扩展:无 SSL-会话: 协议:TLSv1 密码:RC4-SHA 会话 ID:C05953342AC01E9AB63CF0BABBE942B4E29061AA4904C3F1393EBBB1548B0254 会话 ID-ctx: 万能钥匙:38B97C0CC2795AD1D3EEACAE244E33F1E5A0988AE9182AC85DFFF5B6BFAE6585E6BCF763E1E0EB300CD38B87CC0F2501 键-Arg:无 Krb5 主体:无 PSK 身份:无 PSK 身份提示:无 TLS 会话票证生命周期提示:100800(秒) TLS 会话票证: [为简洁起见删除] 开始时间:1347036912 超时:300(秒) 验证返回码:0(ok)
目标(ARM)机器的输出
验证深度为 9 已连接(00000003) depth=1 C = ZA, O = Thawte Consulting (Pty) Ltd., CN = Thawte SGC CA 验证错误:num=20:无法获取本地颁发者证书 验证返回:1 depth=1 C = ZA, O = Thawte Consulting (Pty) Ltd., CN = Thawte SGC CA 验证错误:num=27:证书不受信任 验证返回:1 depth=0 C = 美国,ST = 加利福尼亚,L = 山景城,O = Google Inc,CN = www.google.com 验证返回:1 --- 证书链 0 秒:/C=US/ST=加利福尼亚/L=山景/O=Google Inc/CN=www.google.com i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA -----开始证书----- [为简洁起见删除] -----结束证书----- 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority -----开始证书----- [为简洁起见删除] -----结束证书----- --- 服务器证书 主题=/C=US/ST=加利福尼亚/L=山景/O=Google Inc/CN=www.google.com 发行人=/C=ZA/O=Thawte Consulting (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 会话 ID-ctx: 万能钥匙:7A15F2071D50C076C0524AAD45857C5683212370582AD7D9F882B64104F0A0A8C2948B8B85C1EC19015C 51CAC30D4A05 键-Arg:无 PSK 身份:无 PSK 身份提示:无 SRP 用户名:无 TLS 会话票证生命周期提示:100800(秒) TLS 会话票证: [为简洁起见删除] 开始时间:1347036508 超时:300(秒) 验证返回码:27(证书不受信任)