Chromeでは、緑色のHTTPSロックアイコンをクリックすると、証明書の詳細を示すウィンドウが開きます。
同じことをcURLで試したところ、一部の情報しか得られませんでした。
$ curl -vvI https://gnupg.org
* Rebuilt URL to: https://gnupg.org/
* Hostname was NOT found in DNS cache
* Trying 217.69.76.60...
* Connected to gnupg.org (217.69.76.60) port 443 (#0)
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate: gnupg.org
* Server certificate: Gandi Standard SSL CA
* Server certificate: UTN-USERFirst-Hardware
> HEAD / HTTP/1.1
> User-Agent: curl/7.37.1
> Host: gnupg.org
> Accept: */*
コマンドラインツール(cURLまたはその他)から完全な証明書情報を取得する方法はありますか?
目的に応じてOpenSSLを使用できるはずです。
echo | openssl s_client -showcerts -servername gnupg.org -connect gnupg.org:443 2>/dev/null | openssl x509 -inform pem -noout -text
このコマンドは、目的のWebサイトに接続し、PEM形式の証明書を、詳細を読み取って解析する別のopensslコマンドにパイプします。
( "冗長" -servername
パラメータは、openssl
にSNIサポート付きの要求を実行させるために必要です。)
それが私の毎日のスクリプトです。
curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'
出力:
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
* server certificate verification SKIPPED
* server certificate status verification SKIPPED
* common name: www.google.com (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: C=US,ST=California,L=Mountain View,O=Google Inc,CN=www.google.com
* start date: Wed, 24 May 2017 17:39:15 GMT
* expire date: Wed, 16 Aug 2017 17:13:00 GMT
* issuer: C=US,O=Google Inc,CN=Google Internet Authority G2
* compression: NULL
* ALPN, server accepted to use http/1.1
* Connection #0 to Host www.google.com left intact
必要な情報の種類によって異なりますが、
openssl s_client -showcerts -connect gnupg.org:443
Chromeがそれを提示するように、人間が読みやすいとは言えませんが、.
nmap -p 443 --script ssl-cert gnupg.org
-p 443
はポート443のみをスキャンすることを指定します。省略した場合はすべてのポートがスキャンされ、見つかったSSLサービスの証明書の詳細が表示されます。 --script ssl-cert
Nmapスクリプトエンジン に ssl-cert
スクリプト。ドキュメントから、このスクリプトは「サーバーのSSL証明書を取得します。証明書について出力される情報の量は、冗長レベルによって異なります。」
出力例:
Starting Nmap 7.40 ( https://nmap.org ) at 2017-11-01 13:35 PDT
Nmap scan report for gnupg.org (217.69.76.60)
Host is up (0.16s latency).
Other addresses for gnupg.org (not scanned): (null)
rDNS record for 217.69.76.60: www.gnupg.org
PORT STATE SERVICE
443/tcp open https
| ssl-cert: Subject: commonName=gnupg.org
| Subject Alternative Name: DNS:gnupg.org, DNS:www.gnupg.org
| Issuer: commonName=Gandi Standard SSL CA 2/organizationName=Gandi/stateOrProvinceName=Paris/countryName=FR
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2015-12-21T00:00:00
| Not valid after: 2018-03-19T23:59:59
| MD5: c3a7 e0ed 388f 87cb ec7f fd3e 71f2 1c3e
|_SHA-1: 5196 ecf5 7aed 139f a511 735b bfb5 7534 df63 41ba
Nmap done: 1 IP address (1 Host up) scanned in 2.31 seconds
完全を期すため:システムにインストールした場合Java 7以降
keytool -printcert -sslserver $Host[:$port]
chain(提供どおり)のほぼすべての詳細をほぼ醜い形式で示しています。
あなたがすべきかどうかJavaがあなたのシステムにインストールされている)私は答えません。
SSL証明書の詳細を確認するには、次のコマンドラインツールを使用できるようになってから使用します。
https://github.com/azet/tls_tools
証明書を再発行したり既存の証明書を検証したりするためのすべての情報が正しいこと、および依存関係が少ないことを再確認するのは素晴らしいことです[〜#〜]および[〜#〜]セットアップは必要ありません。
これは、出力の最初の数行は次のようになります。
$ ./check_certificate_chain.py gnupg.org 443
>> Certificate Chain:
[+]* OU=Domain Control Validated, OU=Gandi Standard SSL, CN=gnupg.org
[+]** C=FR, O=GANDI SAS, CN=Gandi Standard SSL CA
[+]*** C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
>> Certificate Information:
................................................................................
- [Subject]: OU=Domain Control Validated, OU=Gandi Standard SSL, CN=gnupg.org
- [Issuer]: C=FR, O=GANDI SAS, CN=Gandi Standard SSL CA
- [Valid from]: Mar 18 00:00:00 2014 GMT
- [Valid until]: Mar 18 23:59:59 2016 GMT
- [Authority]: Is not a CA
- [Version]: 2
- [Serial No.]: 43845251655098616578492338727643475746
- [X.509 Extension Details]:
-- [x509_authorityKeyIdentifier]:
keyid:B6:A8:FF:A2:A8:2F:D0:A6:CD:4B:B1:68:F3:E7:50:10:31:A7:79:21
その出力の後に、同じ詳細レベルで証明書チェーン全体が続きます。
Opensslのs_clientのようなssl中心のcliツールではなく、私が気に入っているのは、ほとんどの場合に必要な1つのジョブを実行することです。もちろん、opensslはより柔軟です(つまり、clientcerts、imapを奇数のポートでチェックするなど)-しかし、私は常にそれを必要とするわけではありません。
または、掘り下げて設定する時間がある場合、またはより多くの機能を評価する場合は、sslyzeという名前の大きなツールがあります(依存関係があるため使用せず、インストールします...)。
Windowsでこれを行う場合は、次の関数でPowerShellを使用できます。
function Retrieve-ServerCertFromSocket ($hostname, $port=443, $SNIHeader, [switch]$FailWithoutTrust)
{
if (!$SNIHeader) {
$SNIHeader = $hostname
}
$cert = $null
try {
$tcpclient = new-object System.Net.Sockets.tcpclient
$tcpclient.Connect($hostname,$port)
#Authenticate with SSL
if (!$FailWithoutTrust) {
$sslstream = new-object System.Net.Security.SslStream -ArgumentList $tcpclient.GetStream(),$false, {$true}
} else {
$sslstream = new-object System.Net.Security.SslStream -ArgumentList $tcpclient.GetStream(),$false
}
$sslstream.AuthenticateAsClient($SNIHeader)
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($sslstream.remotecertificate)
} catch {
throw "Failed to retrieve remote certificate from $hostname`:$port because $_"
} finally {
#cleanup
if ($sslStream) {$sslstream.close()}
if ($tcpclient) {$tcpclient.close()}
}
return $cert
}
これにより、次のようなきちんとしたことができます
#Save to file and open
Retrieve-ServerCertFromSocket www.wrish.com 443 | Export-Certificate -FilePath C:\temp\test.cer ; start c:\temp\test.cer
#Display the cert details
Retrieve-ServerCertFromSocket www.wrish.com 443 | fl subject,*not*,Thumb*,ser*
これにはシェルスクリプトを使用します。それは単にopensslコマンドのラッパーであり、構文を覚えておく必要がありません。
これは、私が通常関心を持っているほとんどの証明書情報を解析するためのオプション、または未加工のopenssl出力を表示するためのオプションを提供します。
ローカル証明書ファイルまたはリモートサーバーを照会できます。
使用法:
$ ssl-cert-info --help
Usage: ssl-cert-info [options]
This Shell script is a simple wrapper around the openssl binary. It uses
s_client to get certificate information from remote hosts, or x509 for local
certificate files. It can parse out some of the openssl output or just dump all
of it as text.
Options:
--all-info Print all output, including boring things like Modulus and
Exponent.
--alt Print Subject Alternative Names. These will be typically be
additional hostnames that the certificate is valid for.
--cn Print commonName from Subject. This is typically the Host for
which the certificate was issued.
--debug Print additional info that might be helpful when debugging this
script.
--end Print certificate expiration date. For additional functionality
related to certificate expiration, take a look at this script:
"http://prefetch.net/code/ssl-cert-check".
--dates Print start and end dates of when the certificate is valid.
--file Use a local certificate file for input.
--help Print this help message.
--Host Fetch the certificate from this remote Host.
--issuer Print the certificate issuer.
--most-info Print almost everything. Skip boring things like Modulus and
Exponent.
--option Pass any openssl option through to openssl to get its raw
output.
--port Use this port when conneting to remote Host. If ommitted, port
defaults to 443.
--subject Print the certificate Subject -- typically address and org name.
Examples:
1. Print a list of all hostnames that the certificate used by Amazon.com
is valid for.
ssl-cert-info --Host Amazon.com --alt
DNS:uedata.Amazon.com
DNS:Amazon.com
DNS:amzn.com
DNS:www.amzn.com
DNS:www.Amazon.com
2. Print issuer of certificate used by smtp.gmail.com. Fetch certficate info
over port 465.
ssl-cert-info --Host smtp.gmail.com --port 465 --issuer
issuer=
countryName = US
organizationName = Google Inc
commonName = Google Internet Authority G2
3. Print valid dates for the certificate, using a local file as the source of
certificate data. Dates are formatted using the date command and display
time in your local timezone instead of GMT.
ssl-cert-info --file /path/to/file.crt --dates
valid from: 2014-02-04 16:00:00 PST
valid till: 2017-02-04 15:59:59 PST
4. Print certificate serial number. This script doesn't have a special option
to parse out the serial number, so will use the generic --option flag to
pass '-serial' through to openssl.
ssl-cert-info --Host gmail.com --option -serial
serial=4BF004B4DDC9C2F8
ここでスクリプトを取得できます: https://web.archive.org/web/20190528035412/http://giantdorks.org/alain/Shell-script-to-check-ssl-certificate-info-like -expiration-date-and-subject /
有効期限のみが必要な場合(正確な答えではありませんが、Chrome証明書の詳細を使用する場合)の9/10です)、以下を使用できます。
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate
スクリプトなどに役立ちます。
c4urself@eos ~ → which ssl_expiry
ssl_expiry () {
echo | openssl s_client -connect ${1}:443 2> /dev/null | openssl x509 -noout -enddate
}
c4urself@eos ~ → ssl_expiry google.com
notAfter=Jun 12 16:54:00 2018 GMT
nmap -sV -sC google.com -p 443