2017-08-04 9 views
0

特定のエンドポイントにHTTPメソッドを送信し、エンドポイントが使用している証明書を返す方法はありますか?SSLハンドシェイクで使用されている証明書はどのように取得できますか?

は私がこのエンドポイントは、それを消費する私の試みに提供されていることの証明書情報を取得したいエンドポイントhttps://myendpoint.mydomain.com/mycontext/myservice

があるとします。ここで

+0

あなたは一つの言語のための一般的なアプローチ(すなわち、CLIツール)または特定をお探しですか? – evilSnobu

+0

一般的な解決策 –

答えて

1

は、標準的なopenssl s_client例です:そこ

$ openssl s_client -connect github.com:443 -servername github.com 

CONNECTED(00000003) 
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 Extended Validation Server CA 
verify return:1 
depth=0 businessCategory = Private Organization, 
     jurisdictionC = US, jurisdictionST = Delaware, 
     serialNumber = 5157550, street = "88 Colin P Kelly, Jr Street", 
     postalCode = 94107, C = US, ST = California, L = San Francisco, 
     O = "GitHub, Inc.", CN = github.com 
verify return:1 
--- 
Certificate chain 
0 s:/businessCategory=Private Organization/jurisdictionC=US/jurisdictionST=Delaware/serialNumber=5157550/street=88 Colin P Kelly, Jr Street/postalCode=94107/C=US/ST=California/L=San Francisco/O=GitHub, Inc./CN=github.com 
    i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA 
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA 
    i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIHeTCCB[...] 
-----END CERTIFICATE------- 

[...a bunch more stuff...] 

現代のプログラミング言語を使用して、証明書情報を抽出するために使用することができTLSライブラリを持っています。もしそうでなければ、OpenSSLラッパーがあなたに届きます。

// PeerCertificate is of x509.Certificate type 
conn.ConnectionState().PeerCertificates[0].Subject.CommonName 

はここ(M2Crypto付き)Pythonの:エッセンスで

>>> import ssl 
>>> import M2Crypto 
>>> cert = ssl.get_server_certificate(('github.com', 443)) 
>>> x509.get_subject().as_text()>>> x509 = M2Crypto.X509.load_cert_string(cert) 
>>> x509.get_subject().as_text() 
'businessCategory=Private Organization/jurisdictionC=US/jurisdictionST=Delaware/ 
serialNumber=5157550/street=88 Colin P Kelly, 
Jr Street/postalCode=94107, C=US, ST=California, L=San Francisco, 
O=GitHub, Inc., CN=github.com' 

>>> x509.get_issuer().as_text() 
'C=US, O=DigiCert Inc, OU=www.digicert.com, 
CN=DigiCert SHA2 Extended Validation Server CA' 

>>> x509.get_fingerprint() 
'B890FABE8BB63625899E1E0049814797' 

# raw cert dump 
>>> str(cert) 
'-----BEGIN CERTIFICATE-----\n 
MIIHeTCCBmGgAwIBAgIQC/20CQrXteZAwwsW[...]\n 
-----END CERTIFICATE-----\n' 

それは依存

ゴーでは、crypto/tlsパッケージを使用すると思います。テイクアウェイはTLSがHTTPに全く結ばれていない(HTTPはアプリケーション層です)、TLSはOSIスタックの方が低くなっています。 HTTPはTLSハンドシェイクが完了した後に始まります。したがって、ピア証明書を取得するためにHTTPSコールを行う必要はなく、TLSをハンドシェイクするだけです。

OSI model

Click for image source

関連する問題