как загрузить сертификат ssl с веб-сайта?

Я хочу загрузить сертификат ssl, скажем https://www.google.com , используя wget или любые другие команды. Любая командная строка unix? wget или openssl?

152 голоса | спросил RainDoctor 8 Mayam10 2010, 01:01:48

6 ответов


54

Я нашел ответ. Openssl предоставляет его.

  

openssl s_client -connect $ {REMHOST}: $ {REMPORT}

ответил RainDoctor 8 Mayam10 2010, 01:05:52
207

Чтобы загрузить сертификат, вам необходимо использовать клиент, встроенный в 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' удаляет информацию о цепочке сертификатов и подробностях подключения. Это предпочтительный формат для импорта сертификата в другие хранилища ключей.

ответил Sean Reifschneider 20 +04002010-10-20T02:59:57+04:00312010bEurope/MoscowWed, 20 Oct 2010 02:59:57 +0400 2010, 02:59:57
20

клиентский инструмент GNUTLS , gnutls-cli, также может сделать это легко:

 gnutls-cli -print-cert www.example.com \
        & Lt; /dev /null \
        > www.example.com.certs

Программа предназначена для предоставления интерактивного клиента сайту, поэтому вам нужно предоставить пустой ввод (в этом примере от /dev /null), чтобы завершить интерактивный сеанс.

ответил bignose 7 +04002012-10-07T10:19:15+04:00312012bEurope/MoscowSun, 07 Oct 2012 10:19:15 +0400 2012, 10:19:15
8

на основе ответа @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
ответил oDDsKooL 27 Maypm14 2014, 13:31:27
5
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 предоставляет конечный сервер.

ответил oDDsKooL 27 Maypm14 2014, 13:31:27
0

Альтернативный синтаксис с использованием Ex и замещения процесса:

ex + '/BEGIN CERTIFICATE /, /END CERTIFICATE /p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq> file.crt
ответил kenorb 12 Jpm1000000pmTue, 12 Jan 2016 13:38:50 +030016 2016, 13:38:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132