質問: 証明書が不明なcaによって署名されている場合、サーバーの証明書を表示するにはどうすればよいですか? tlsの問題を引き起こしているサーバーがあり、問題の診断に役立てるために、サーバーが提示している証明書を表示したいと思います。通常、opensslを使用して次のように証明書を表示します。$ openssl s_client -connect facebook.com:443 ただし、このサーバーの証明書にどのcaが署名したかはわかりません。私thoughtそれは私たちの内部caでしたが、テストはそうではないことを示唆しています。したがって、opensslの-cafileまたは-capathフラグを使用してcaを指定することはできません。もう1つの制限。サーバーはhttpサーバーではありません(postgresです)。それ以外の場合は、curl --insecureを使用します。 opensslのドキュメント によると、-verifyフラグを使用してみました。 使用する深さを確認します。これは、サーバー証明書チェーンの最大長を指定し、サーバー証明書の検証をオンにします。現在、検証操作はエラー後も続行されるため、証明書チェーンに関するすべての問題を確認できます。副作用として、サーバー証明書の検証の失敗が原因で接続が失敗することはありません。 すべての問題が見られるように、すべてのエラーの後で続行すると主張しています。しかし、私が得るのは:1737:error:140790e5:ssl routines:ssl23_write:ssl handshake failure:s23_lib.c:188: これは、-verifyの有無にかかわらず表示されるエラーメッセージです。では、サーバーから提示された証明書を表示するにはどうすればよいですか?
回答: 証明書が不明なcaによって署名されている場合、サーバーの証明書を表示するにはどうすればよいですか? それは簡単です(そしてcaは物事を考慮しません)... _s_client_オプションを使用した入力として_x509_出力を_-text -noout_にパイプします。以下のコマンドは、sniとtls1.0も参加させます。_$ openssl s_client -connect facebook.com:443 -servername facebook.com -tls1 | openssl x509 -text -noout depth=1 c = us, o = digicert inc, ou = www.digicert.com, cn = digicert sha2 high assurance server ca verify error:num=20:unable to get local issuer certificate certificate: data: version: 3 (0x2) serial number: 0e:cb:09:39:b2:b1:01:54:b8:95:70:c7:b2:2b:7a:47 signature algorithm: sha256withrsaencryption issuer: c = us, o = digicert inc, ou = www.digicert.com, cn = digicert sha2 high assurance server ca validity not before: aug 28 00:00:00 2014 gmt not after : dec 30 12:00:00 2016 gmt subject: c = us, st = ca, l = menlo park, o = "facebook, inc.", cn = *.facebook.com subject public key info: public key algorithm: id-ecpublickey public-key: (256 bit) pub: 04:d8:d1:dd:35:bd:e2:59:b6:fb:9b:1f:54:15:8c: db:bf:4e:58:bd:47:be:b8:10:fc:22:e9:d2:9e:98: f8:49:2a:25:fb:94:46:e4:42:99:84:50:1c:5f:01: fd:14:25:31:5c:4e:d9:64:fd:c5:0c:b3:46:d2:a1: bc:70:b4:87:8e asn1 oid: prime256v1 nist curve: p-256 x509v3 extensions: x509v3 authority key identifier: keyid:51:68:ff:90:af:02:07:75:3c:cc:d9:65:64:62:a2:12:b8:59:72:3b x509v3 subject key identifier: 43:09:93:40:fa:11:4b:30:33:ec:f2:87:6e:8d:71:18:cf:8a:bc:8e x509v3 subject alternative name: dns:*.facebook.com, dns:*.facebook.net, dns:*.fb.com, dns:*.fbcdn.net, dns:*.fbsbx.com, dns:*.m.facebook.com, dns:*.messenger.com, dns:*.xx.fbcdn.net, dns:*.xy.fbcdn.net, dns:*.xz.fbcdn.net, dns:facebook.com, dns:fb.com, dns:messenger.com x509v3 key usage: critical digital signature x509v3 extended key usage: tls web server authentication, tls web client authentication x509v3 crl distribution points: full name: uri:http://crl3.digicert.com/sha2-ha-server-g5.crl full name: uri:http://crl4.digicert.com/sha2-ha-server-g5.crl x509v3 certificate policies: policy: 2.16.840.1.114412.1.1 cps: https://www.digicert.com/cps policy: 2.23.140.1.2.2 authority information access: ocsp - uri:http://ocsp.digicert.com ca issuers - uri:http://cacerts.digicert.com/digicertsha2highassuranceserverca.crt x509v3 basic constraints: critical ca:false ct precertificate scts: signed certificate timestamp: version : v1 (0x0) log id : a4:b9:09:90:b4:18:58:14:87:bb:13:a2:cc:67:70:0a: 3c:35:98:04:f9:1b:df:b8:e3:77:cd:0e:c8:0d:dc:10 timestamp : dec 16 15:50:03.515 2015 gmt extensions: none signature : ecdsa-with-sha256 30:44:02:20:28:c8:7d:86:5d:f1:14:32:9d:3a:50:3e: 2f:c2:99:80:ec:13:c8:f9:1f:5d:9f:8a:0a:81:fb:f9: ea:02:8c:f5:02:20:28:6f:7f:97:b3:27:01:66:bb:89: 4d:c5:a8:53:3a:34:ce:f6:ab:46:ae:f1:70:bd:b8:27: 2d:c2:03:28:f6:2c signed certificate timestamp: version : v1 (0x0) log id : 68:f6:98:f8:1f:64:82:be:3a:8c:ee:b9:28:1d:4c:fc: 71:51:5d:67:93:d4:44:d1:0a:67:ac:bb:4f:4f:fb:c4 timestamp : dec 16 15:50:03.453 2015 gmt extensions: none signature : ecdsa-with-sha256 30:45:02:21:00:fb:7b:ce:fa:1d:74:6b:eb:76:20:77: 16:e3:c0:58:72:b3:21:35:9a:c0:43:2d:a8:90:77:e1: b7:9a:da:5f:6d:02:20:04:aa:8b:42:d2:ac:ca:d1:87: df:70:54:c7:1e:22:20:53:36:df:93:5b:b8:1f:5b:fc: 80:05:d1:9a:5a:ab:b0 signed certificate timestamp: version : v1 (0x0) log id : 56:14:06:9a:2f:d7:c2:ec:d3:f5:e1:bd:44:b2:3e:c7: 46:76:b9:bc:99:11:5c:c0:ef:94:98:55:d6:89:d0:dd timestamp : dec 16 15:50:03.663 2015 gmt extensions: none signature : ecdsa-with-sha256 30:45:02:21:00:fe:2c:b6:d4:ef:95:ff:fc:cd:78:71: 81:88:ad:3a:b3:a3:12:0c:82:b2:d8:b5:4c:e6:f1:66: fe:d4:7e:34:a5:02:20:2d:2b:d5:d5:13:84:9c:99:d9: 16:65:15:08:dc:59:65:c5:c0:2c:6a:95:e7:e9:83:9f: af:26:8b:39:10:26:28 signature algorithm: sha256withrsaencryption aa:91:ae:52:01:8c:60:f6:02:b6:94:eb:af:6e:eb:dd:3c:c8: e1:6f:17:ab:b8:28:80:ec:dc:54:82:56:24:c1:16:08:e1:c2: c8:3e:3c:0f:53:18:40:7f:df:41:36:93:95:5f:b1:d9:35:43: 5e:94:60:f9:d6:a7:83:6a:7d:c7:b4:f6:0b:90:76:f8:b4:0a: c1:31:0d:16:18:b5:cb:71:5c:f9:93:02:21:aa:bb:40:fd:ee: 0a:1b:a9:f2:c3:0e:25:13:63:67:a2:42:eb:79:ea:5f:8f:fb: d8:bb:76:8c:5f:61:ca:2c:be:01:44:09:af:36:1e:a9:f7:40: 1c:a4:b3:65:78:42:68:04:f0:4b:0c:7f:1f:d9:13:f6:0a:3b: 35:79:73:69:c7:3c:70:e5:5d:06:98:ea:88:d5:dd:6b:e6:66: 62:57:cf:af:d0:fb:67:9b:e0:c8:20:3a:b9:b6:4f:39:7a:5f: c4:fd:a0:46:8c:bc:c7:44:a7:b3:ab:52:49:db:86:97:ed:2e: bc:80:56:95:9f:d2:63:84:57:e7:92:15:32:e4:75:c5:81:52: cb:3b:26:e1:5d:4b:fd:e0:39:5e:81:06:af:cc:7e:77:d1:9d: 9a:06:6f:ef:f7:fc:e2:86:5a:16:5a:c2:04:de:80:e3:78:1f: 0f:fc:7f:df _ このサーバーの証明書に署名したcaがわかりません。それは私たちの内部caだと思いましたが、テストはそうではないことを示唆しています。したがって、opensslの-cafileまたは-capathフラグを使用してcaを指定することはできません。 ここで何を得ているのかわかりません。私は疑わしいあなたの内部caがfacebookの証明書に署名しました。また、pkixでは1つの発行者のみが許可されるため、証明書に2つ以上のcaの署名を含めることはできません。 。これは、1つの発行者、1つの権限キー識別子などのプロビジョニングしかないためです。許可されていませんが、このユースケースでは多くの意味; pkixメーリングリストの 複数の署名者がいる証明書? も参照してください。if_openssl s_client_をverify return code: 0 (ok)次に、digicertのcaでcafileを使用します。 "digicert high assurance ev root ca" という名前が必要であり、それをpemに変換する必要があります。digicert high assurance evルートcaを取得_$ wget https://www.digicert.com/cacerts/digicerthighassuranceevrootca.crt --2016-10-13 16:34:12-- https://www.digicert.com/cacerts/digicerthighassuranceevrootca.crt resolving www.digicert.com (www.digicert.com)... 64.78.193.234 connecting to www.digicert.com (www.digicert.com)|64.78.193.234|:443... connected. http request sent, awaiting response... 200 ok length: 969 [application/x-x509-ca-cert] saving to: ‘digicerthighassuranceevrootca.crt’ digicerthighassuran 100%[===================>] 969 --.-kb/s in 0s 2016-10-13 16:34:13 (11.6 mb/s) - ‘digicerthighassuranceevrootca.crt’ saved [969/969] $ _証明書をpemに変換_$ openssl x509 -in digicerthighassuranceevrootca.crt -inform der \ -out digicerthighassuranceevrootca.pem -outform pem $ _接続して確認_$ openssl s_client -connect facebook.com:443 -servername facebook.com \ -tls1 -cafile digicerthighassuranceevrootca.pem connected(00000005) depth=2 c = us, o = digicert inc, ou = www.digicert.com, cn = digicert high assurance ev root ca verify return:1 depth=1 c = us, o = digicert inc, ou = www.digicert.com, cn = digicert sha2 high assurance server ca verify return:1 depth=0 c = us, st = ca, l = menlo park, o = "facebook, inc.", cn = *.facebook.com verify return:1 server did acknowledge servername extension. --- certificate chain 0 s:/c=us/st=ca/l=menlo park/o=facebook, inc./cn=*.facebook.com i:/c=us/o=digicert inc/ou=www.digicert.com/cn=digicert sha2 high assurance server ca 1 s:/c=us/o=digicert inc/ou=www.digicert.com/cn=digicert sha2 high assurance server ca i:/c=us/o=digicert inc/ou=www.digicert.com/cn=digicert high assurance ev root ca --- ... start time: 1476391066 timeout : 7200 (sec) verify return code: 0 (ok) extended master secret: no _ しかし、私が得るのは: _1737:error:140790e5:ssl routines:ssl23_write:ssl handshake failure:s23_lib.c:188: _推測ですが... sni(_-servername_オプション)とtls 1.0以降(_-tls1_オプションはtls 1.0用)を使用してみてください。