OpenSSL 1.0.2g(OS XのMacPorts)を使用してGoogleの証明書を確認できます(OS Xでは、通常はキーチェーンに証明書バンドルを保存するため、証明書バンドルを指定する必要があります)。
$ echo Q | /opt/local/bin/openssl s_client -connect www.google.com:443 -servername www.google.com -verify 6 -CAfile test/cabundle.crt > /dev/null
verify depth is 6
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = www.google.com
verify return:1
DONE
すべてが大丈夫です。システムバージョン(0.9.8zg)を使用すると、まったく同じCAバンドルを保持エラーが発生します。
$ echo Q | /usr/bin/openssl s_client -connect www.google.com:443 -servername www.google.com -verify 6 -CAfile test/cabundle.crt > /dev/null
verify depth is 6
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=27:certificate not trusted
verify return:1
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority G2
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
verify return:1
DONE
CAバンドルを手動で指定するため、どこで問題が発生するのかわかりません。
ベストアンサー1
~からhttps://trac.macports.org/ticket/47805
問題は、AppleがGoogle(および他のウェブサイト)証明書の信頼アンカーとして使用されていたYosemiteの1024ビットルートを削除したことです。通常、チェーンの中間証明書の1つがOS Xの信頼できるルートCA(Googleの場合はGeoTrust Global CA)ではないため、証明書の有効性には影響しません。
ただし、1.0.2より前のOpenSSLはこれを検出できず(仲介者が信頼できるルートCAであることを確認して)、常に信頼チェーンを最後まで追いつきました。この場合、証明書チェーンの終わりが実際に信頼できないため、証明書を確認できません。 OpenSSL 1.0.2はこの問題を解決するためにスイッチを追加しましたが(openssl s_clientの-trusted_firstによって有効になっています)、このオプションは各ソフトウェアで個別に有効にする必要があります。