Я хочу загрузить ssl-сертификат, скажем, https://www.google.com , используя wget или любые другие команды. Любая командная строка Unix? Wget или OpenSSL?
Я хочу загрузить ssl-сертификат, скажем, https://www.google.com , используя wget или любые другие команды. Любая командная строка Unix? Wget или OpenSSL?
Ответы:
Чтобы скачать сертификат, вам нужно использовать клиент, встроенный в openssl, например:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Это сохранит сертификат в /tmp/$SERVERNAME.cert
.
Вы можете использовать, -showcerts
если вы хотите скачать все сертификаты в цепочке. Но если вы просто хотите скачать сертификат сервера, указывать не нужно-showcerts
echo -n
дает ответ серверу, чтобы освободилось соединение
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
удаляет информацию о цепочке сертификатов и детали подключения. Это предпочтительный формат для импорта сертификата в другие хранилища ключей.
-showcerts
Показывает ли сервер / лист сертификат тоже? Я думал, что он отображал только промежуточные звенья, когда этот переключатель был включен.
s_client
всегда показывает сертификат сервера (если он есть, то есть сервер отвечает на привет и не выбирает анонимный набор). -showcerts
показывает все полученные сертификаты, сначала серверный сертификат, затем промежуточные и / или root.
Я нашел ответ. Openssl предоставляет это.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOF
чтобы видеть детали свидетельства
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem
Предоставлено serverfault.com/questions/139728/…
GnuTLS клиентский инструмент, gnutls-cli
также может сделать это легко:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Программа предназначена для предоставления интерактивного клиента сайту, поэтому необходимо /dev/null
завершить интерактивный сеанс пустым вводом (в данном примере с ).
основанный на ответе @bignose, вот отдельная версия, которая хорошо вписывается, например, в рецепт шеф-повара:
sudo apt-get install gnutls-bin
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
этот режим openssl ожидает ввода stdin, поэтому мы предоставляем его через него true |
, он подключается к серверу, указанному в параметре -connect. 2>/dev/null
Приглушая ошибки (необязательно), мы можем передать весь вывод в синтаксический анализатор x509, указав /dev/stdin
в качестве входного файла использовать оболочку канала. И что будет выводить только -----BEGIN CERTIFICATE-----
в -----END CERTIFICATE-----
части s_client
вывода. Вы можете перенаправить это в файл, добавив > google.com.pem
в конец команды.
Насколько я могу судить, это не проверяет цепочку сертификатов, а только может сказать вам, какие идентификаторы ssl предоставляет конечный сервер.
x509
читает stdin по умолчанию, поэтому -in /dev/stdin
избыточно (3) s_client
проверяет, правильно ли сертификат сервера соединен с локальным доверительным якорем (root) и не устарел, но вы скрыл информацию, которая показала бы это (4) он НЕ проверяет на отзыв (5) он проверяет имя в сертификате сервера только в 1.0.2, а затем не по умолчанию (но вы можете легко проверить это самостоятельно, посмотрев сертификат) потом)