Google Chrome начнет предупреждать пользователей о том, что их SSL-соединение небезопасно при следующих условиях:
Поэтому я пытаюсь создать сценарий метода, чтобы определить, затронут ли сертификат. Вот пример сертификата 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
Как я мог определить, что это сертификат SHA1 из строки DHE-RSA-AES256-GCM-SHA384
? Который 256
в строке выглядит так, будто он использует 256-битный алгоритм, хотя я знаю, что это не потому, что я сам выполнил запрос сертификата с $ openssl req -new -newkey rsa:2048 -nodes
. Погуглил, я нашел этот ресурс или поддерживаемые шифры но я не понимаю, как я могу определить надежность шифра из этого документа.
Как я мог определить надежность шифра с помощью curl, чтобы я мог его написать?
Как я мог определить, что это сертификат SHA1 из строки DHE-RSA-AES256-GCM-SHA384
Вы не можете. Эта строка просто описывает набор шифров, используемый для шифрования, и не зависит от самого сертификата. Вместо этого вам нужно взглянуть на сертификат, например:
openssl s_client -connect example.com:443 | \
openssl x509 -text -noout |\
grep 'Signature Algorithm\|Not After'
Обратите внимание, что недостаточно проверить, содержит ли сертификат подпись SHA-2. Вам необходимо убедиться, что ни один из промежуточных сертификатов в цепочке до корня не подписан с помощью SHA-1.
НСС имеет переменную среды, NSS_HASH_ALG_SUPPORT, который можно использовать для управления тем, какие алгоритмы хеширования доступны для программ, использующих библиотеку. Эта переменная среды будет соблюдаться рядом программ, включая Firefox, и curl
если он скомпилирован с поддержкой NSS (как, например, в 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