Я хочу скачать сертификат 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'
удаляет информацию о цепочке сертификатов и деталях подключения. Это предпочтительный формат для импорта сертификата в другие хранилища ключей.
Я нашел ответ. Openssl предоставляет это.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
В GNUTLS клиентский инструмент, gnutls-cli
, также может упростить эту задачу:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Программа предназначена для предоставления интерактивного клиента сайту, поэтому вам нужно ввести пустой ввод (в этом примере из /dev/null
), чтобы завершить интерактивный сеанс.
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-идентификатор предоставляет конечный сервер.
на основе ответа @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
Альтернативный синтаксис с использованием Ex и подстановки процесса:
ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt