web-dev-qa-db-ja.com

SSL証明書がSHA-1の段階的廃止の影響を受けるかどうかの判断

Google chromeは SSL接続が安全でないことをユーザーに警告 以下の条件下で開始します:

  1. 証明書はSHA1ハッシュアルゴリズムおよびを使用します
  2. 証明書の有効期限は2016-01-01(またはさまざまなソースによる2017-01-01)以降です

したがって、証明書が影響を受けるかどうかを判断するメソッドをスクリプト化しようとしています。これは、私が維持している別のサーバー上のSHA1証明書の例であり、「安全な」時間枠で期限切れになります。

$ curl -v --silent https://example.com/ 2>&1 | grep "expire\|SSL connection using"
* SSL connection using DHE-RSA-AES256-GCM-SHA384
*        expire date: 2015-07-20 00:00:00 GMT

この証明書が文字列DHE-RSA-AES256-GCM-SHA384からSHA1であるとどのように判断できますか?文字列内の256により、確実に表示されます256ビットアルゴリズムを使用しているように、私自身が$ openssl req -new -newkey rsa:2048 -nodesを使用して証明書要求を行ったためではないことがわかっています。グーグルで探し回った このリソースまたはサポートされている暗号 しかし、そのドキュメントから暗号の強度を判断する方法がわかりません。

curlを使用して暗号の強度を判断し、スクリプトを作成するにはどうすればよいですか?

2
dotancohen

この証明書が文字列DHE-RSA-AES256-GCM-SHA384からSHA1であるとどのように判断できますか

できません。この文字列は、暗号化に使用される暗号スイートを説明するだけであり、証明書自体からは独立しています。代わりに、次のように証明書を確認する必要があります。

openssl s_client -connect example.com:443 | \
openssl x509 -text -noout |\
grep 'Signature Algorithm\|Not After'
2
Steffen Ullrich

証明書にSHA-2署名が含まれていることを確認するだけでは不十分であることに注意してください。ルートまでのチェーン内のどの中間証明書もSHA-1で署名されていないことを確認する必要があります。

[〜#〜] nss [〜#〜] は環境変数を備えています NSS_HASH_ALG_SUPPORT これは、ライブラリを使用するプログラムで使用できるハッシュアルゴリズムを制御するために使用できます。この環境変数は、Firefoxを含む多くのプログラム、およびNSSサポートを使用してコンパイルされている場合はcurlによって尊重されます(たとえば、Red Hat Enterprise LinuxやFedoraなど)。

curl -V | fgrep NSS/
env NSS_HASH_ALG_SUPPORT=-SHA-1 curl -v --head https://www.google.com/

curlがNSSサポートを使用してコンパイルされ、SHA-1証明書が使用されている場合、出力は次のようになります。

curl 7.40.0 (x86_64-redhat-linux-gnu) libcurl/7.40.0 NSS/3.18 Basic ECC zlib/1.2.8 libidn/1.29 libssh2/1.5.0
*   Trying 64.233.166.104...
* Connected to www.google.com (64.233.166.104) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* Server certificate:
*       subject: CN=www.google.com,O=Google Inc,L=Mountain View,ST=California,C=US
*       start date: Jun 03 09:26:01 2015 GMT
*       expire date: Sep 01 00:00:00 2015 GMT
*       common name: www.google.com
*       issuer: CN=Google Internet Authority G2,O=Google Inc,C=US
* NSS error -8016 (SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED)
* The certificate was signed using a signature algorithm that is disabled because it is not secure.
* Closing connection 0
curl: (60) The certificate was signed using a signature algorithm that is disabled because it is not secure.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
Exit 60
1
mavit