Назад | Перейти на главную страницу

как скачать сертификат ssl с веб-сайта?

Я хочу скачать сертификат 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