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