Як зберегти SSL-сертифікат віддаленого сервера локально як файл


319

Мені потрібно завантажити сертифікат SSL з віддаленого сервера (не HTTPS, але рукостискання SSL повинно бути таким же, як Google Chrome / IE / wget, і всі згортання дають помилки при перевірці сертифікатів) і додати сертифікат, як довіряли в моїх ноутбуках Windows ' зберігати сертифікати, оскільки я не в змозі змусити своїх ІТ-хлопців дати мені сертифікат CA.

це для офісних комунікацій, тому я не можу реально використовувати фактичного клієнта, щоб отримати сертифікат.

Як це зробити? У мене під рукою Windows 7 і купа Linuxes, тому будь-яка мова / мова сценаріїв - це добре.


Щоб отримати сертифікат поштового сервера , див. Security.stackexchange.com/questions/70528/…
Цей бразильський хлопець

Швидше за все, у вашому браузері є вбудована функція для цього - можливо, під "інструментами для розробників".
nobar

Відповіді:


316

Якщо у вас є доступ до OpenSSL, спробуйте

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

замінюючи {HOSTNAME} та {PORT} на будь-які ваші значення.


2
Я вважаю за краще цей варіант, оскільки мені не потрібно відкривати графічний інтерфейс, і я можу це зробити через SSH з наших серверів.
бренд

2
Плюс він працює для інших протоколів, ніж HTTP.
мат

14
Рішення elec3647 повністю автоматизує витяг ПЕМ в трубопровід оболонки.
ph

4
443 - порт за замовчуванням для HTTPS.
Флейм

4
Мені потрібна була -servernameможливість отримати сертифікат віртуального хоста. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan

240

Швидкий метод отримати витягнутий і завантажений сертифікат - це виконати наступну команду, яка передає висновок з команди -showcerts в команду x509 ssl, яка просто позбавляє все сторонне. Наприклад:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Щоб використовувати сертифікат, за допомогою wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

5
Я спробував це (на іншому веб-сайті) - але, як очікувалося, повний ланцюг сертів: здається, це повернуло лише першу в ланцюжку - це можна очікувати?
monojohnny

8
Це не працює для мене: не вдається завантажити сертифікат 27262: помилка: 0906D06C: підпрограми PEM: PEM_read_bio: немає початкової лінії: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Очікуємо: TRUSTED СЕРТИФІКАТ
Януш

4
Я згоден з monojohnny, це не дає вам повного ланцюга.
Майкл Мансі

4
Пізній, але @monojohnny: openssl s_client -showcertsвідображає всі серти в отриманому ланцюжку (якщо з'єднання вдалося), але проходження через нього openssl x509займає лише перший і відкидає решту. Щоб отримати їх замість, ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'або ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'ви можете також використовувати трохи складніше, awkщоб помістити кожен файл в окремий файл, що полегшує їх використання opensslта деякі інші інструменти.
dave_thompson_085

3
за допомогою wget, здається, зберігається лише a index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE

126

Якщо чесно, я ніколи раніше цього не пробував (ніколи не потребував), однак я просто спробував у Firefox і, здається, працює на економію:

  1. Клацніть піктограму сертифіката SSL вгорі / замок внизу.
  2. Клацніть View Certificate
  3. Клацніть на Detailsвкладці
  4. Виберіть, який сертифікат потрібно від ієрархії [не обведено на зображенні]
  5. Клацніть Export

alt текст


Добре знати - але, на мій цікавість, чи можете ви пояснити трохи більше, що ви намагаєтеся досягти? Мені ніколи не потрібно було експортувати клієнтський сертифікат SSL, і мені дуже цікаво, чому б вам насправді довелося це робити ...
Вільям Гілсум,

1
Це серверний сертифікат, а не сертифікат клієнта. Основна причина експорту клієнтського приватного ключа та сертифіката - це підтримка резервної копії, або якщо ви хочете пройти автентифікацію за допомогою іншого браузера або комп’ютера.
gbroiles

@gbroiles - прочитав питання, він використав неправильну термінологію, але це вирішило його проблему.
Вільям Гілсум

1
правильно, і я відповів на ваше запитання - чому хтось хоче зберегти клієнтський сертифікат? "Сертифікат клієнта SSL" був вашим терміном, а не його.
gbroiles

1
Не схоже, що це є спосіб зробити це в Chrome, правда ?!
фатухоку

50

Експорт сертифіката за допомогою браузера Chrome

  1. Підключіться до веб-сайту за допомогою SSL ( https: // будь-що )

2. Клацніть на символ блокування, а потім - на деталі

  1. З Chrome версії 56 ви зробите наступне: перейдіть до меню «Три точки» -> «Додаткові інструменти» - «Інструменти для розробників», а потім натисніть на вкладку «Безпека». Це дасть вам Огляд безпеки за допомогою кнопки Переглянути сертифікат .

  2. Натисніть кнопку Переглянути сертифікат .

    Відкриється модальне вікно. Він має дві панелі. У верхній відображається ієрархія довіри сертифіката сайту (останній у списку), проміжних (-ів) сертифікатів (ів) та кореневого (найвищого).

    Друга, більша панель, показує деталі одного з сертифікатів.

    Проміжні сертифікати можуть бути нульовими або більше.

    Зауважте, що кореневий сертифікат містить значок із золотою облямівкою. Інші мають синю облямівку.

    Дивіться знімок екрана нижче.

  3. Щоб експортувати сертифікат:

    1. Спочатку натисніть на значок сертифіката в ієрархії довіри.
    2. Сертифікат буде показаний у головній частині модалі.
    3. Клацніть на великій піктограмі сертифіката в головній частині модалу. Перетягніть значок на робочий стіл. Потім Chrome скопіює сертифікат на робочий стіл.

введіть тут опис зображення


1
Мені довелося перетягнути піктограму на текстовий редактор, робочий стіл не працював для мене.
Cory Klein

2
Для Chrome у Windows після натискання кнопки "Переглянути сертифікат" модаль відрізняється від Mac. Перейдіть на вкладку "Деталі", а потім "Копіювати у файл". Потім виберіть формат та ім'я файлу, яке є простим.
PolyTekPatrick

1
Коли я використовую Chrome v63 на Mac OS, текстовий файл, який я отримую, перетягуючи сертифікат, є читабельним для людини, але не в будь-якому структурованому форматі, який я можу зрозуміти, як перетворити в машиночитану форму на зразок X.509 .crt.
Jim DeLaHunt

немає різниці, якщо відкрити з адресного рядка або з цієї вкладки розробників, і все ще не можете завантажити crt ...
user25

1
Більше не працює на Chrome 72.0.3626.121
A. D'Alfonso

20

Це відповідь gbroiles , але я хотів зазначити, що проект CURL має сторінку з ще кількома деталями використання opensslдля збереження SSL-сертифікату віддаленого сервера:

  • openssl s_client -connect {HOSTNAME}: {ПОРТ}} лог-файл трійника
  • Введіть QUITі натисніть клавішу Enter / Return.
  • Сертифікат буде вказаний між маркерами "BEGIN CERTIFICATE" та "END CERTIFICATE".
  • Якщо ви хочете побачити дані в сертифікаті, ви можете використовувати:

    openssl x509 -inform PEM -в certfile -tekst -out certdata

    звідки certfileвитяг сертифіката logfile. Загляньте certdata.


Це працювало для мене. Щоб бути більш явним, я відредагував лог-файл і обрізав усе, що було поза BEGIN CERTIFICATE та END CERTIFICATE і зберег результат як certfile.pem (Не впевнений, чи потрібне розширення).
Майкл Уелч

16

автоматизовані

-servername потрібно було мені, щоб отримати потрібний сертифікат від віртуального хоста на нашому сервері.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

ви також можете перетворити в сертифікат для робочого столу

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

Остання частина полягає в тому, щоб додати його до свого certs, не впевнений, що на Windows
для Mac брелка, який я використовував, має бути подібним ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer



Зауважте, що деякі програми мають проблеми із брелками System та SystemRoot (Golang, я дивлюсь на ВАС), тому після встановлення та встановлення довіри для цих рівнів ви також можете скопіювати його на власного користувача login.keychainчерез Keychain Accessдодаток, Ви можете просто перейти до сертифіката в System / SystemRoot та натиснути та перетягнути його до своєї loginбрелки.
dragon788

1
@ dragon788 - моя мета полягала в автоматизації цього командного рядка, і це працює для мене. Будь ласка, поділіться тут, якщо ви знайдете рішення для login.keychain і через CLI! Дякую!
Артистан

судячи з того, що я прочитав в Інтернеті, я вважаю, що лише упущення -dкоманди буде застосовано тільки до брелока користувача, а не до системного брелока.
dragon788

Якщо ви також додаєте проміжний сертифікат, ви хочете використовувати trustAsRootзамість trustRootтого, щоб він правильно додався.
dragon788

2

Це дасть результати, що містять лише сертифікати

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

0

Знайшов набагато простіший спосіб, якщо в Windows. Спробував Microsoft Edge (попередній хром) і натиснув на блокування в адресному рядку -> Переглянути діалогове вікно сертифіката, що з'являється кнопка "Експорт у файл", яка зберігає його як файл .crt.

Я не дуже використовував Edge для, але це був шматок пирога.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.