Как сохранить SSL-сертификат удаленного сервера локально в виде файла

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

это для связи в офисе, поэтому я не могу использовать реальный клиент для получения сертификата.

Как мне это сделать, у меня Windows 7 и куча Linux удобен, поэтому подойдет любой инструмент/язык сценариев.


Если у вас есть доступ к OpenSSL, попробуйте

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

заменяя {HOSTNAME} и {PORT} любыми вашими значениями.


Быстрый способ получить и загрузить сертификат — запустить следующую команду, которая передает вывод по конвейеру от -showcerts до ssl-команды x509, которая просто удаляет все постороннее. Например:

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

Чтобы использовать сертификат с wget,

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

10


Честно говоря, я никогда не пробовал это раньше (никогда не было необходимости), однако я только что попробовал в Firefox, и, похоже, он работает для сохранения:

  1. Щелкните значок сертификата SSL вверху/Замок внизу.
  2. Щелкните Просмотреть сертификат
  3. Щелкните значок Подробности Вкладка
  4. Выберите сертификат из иерархии [не обведен на картинке]
  5. Нажмите Экспорт

8


Экспорт сертификата с помощью браузера Chrome

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

2. Щелкните символ замка, а затем щелкните Подробнее

  1. Начиная с версии Chrome 56, вы делаете следующее: перейдите в меню «Три точки» — > Дополнительные инструменты -> Инструменты разработчика, затем щелкните вкладку «Безопасность». Это даст вам Обзор безопасности с кнопкой Просмотреть сертификат .

  2. Щелкните на кнопке Просмотреть сертификат .

    Откроется модальное окно. Имеет две панели. Верхний показывает иерархию доверия сертификата сайта (последний в списке), промежуточного сертификата (ов) и корневого сертификата (самого верхнего).

    Вторая, большая панель, показывает детали одного из сертификатов.

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

    Обратите внимание, что корневой сертификат имеет значок с золотой рамкой. Остальные имеют синюю рамку.

    См. Снимок экрана ниже.

  3. Чтобы экспортировать сертификат:

    1. Сначала щелкните значок сертификата в иерархии доверия.
    2. Сертификат будет показан в основной части модального окна.
    3. Щелкните большой значок сертификата в основной части модального окна. Перетащите значок на рабочий стол. Затем Chrome скопирует сертификат на ваш рабочий стол.

8


Это — это ответ gbroiles, но я хотел указать, что в проекте cURL есть страница с более подробной информацией об использовании openssl для сохранения SSL-сертификата удаленного сервера:

  •  openssl s_client -connect {HOSTNAME}: {PORT} |  tee logfile 
  • Введите QUIT и нажмите клавишу Enter/Return.
  • Сертификат будет указан между » Маркеры BEGIN CERTIFICATE «и» END CERTIFICATE «.
  • Если вы хотите увидеть данные в сертификате, вы можете использовать:

     openssl x509  -inform PEM -in certfile -text -out certdata 

    где certfile — это сертификат, извлеченный из файла журнала . Посмотрите в certdata.

1


-servername мне потребовалось, чтобы получить правильный сертификат из виртуальный хост на нашем сервере.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com /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

последняя часть — добавить его в ваши сертификаты, не уверен, что в окнах
для связки ключей Mac, которую я использовал, должно быть похоже …

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

5


Это даст результаты, содержащие только сертификаты

  echo QUIT |   openssl s_client -showcerts -connect имя хоста: порт |   awk '/----- НАЧАТЬ СЕРТИФИКАТ -----/{p = 1};  п; /----- КОНЕЦ СЕРТИФИКАТА -----/{p = 0} ' 

1


Нашел гораздо более простой способ, если в Windows. Попробовал Microsoft Edge (pre-chromium) и щелкнул по замку в адресной строке -> Просмотреть сертификат. Появится диалоговое окно с кнопкой «Экспорт в файл», которая сохраняет его как файл .crt.

Я бы не особо использовал Edge, но это было проще простого.



Экспорт сертификата как BASE-64 закодированный .cer

Я пытаюсь экспортировать сертификат без закрытого ключа, как файл в кодировке BASE-64, так же, как при его экспорте из окон. При экспорте из Windows я могу открыть файл .cer в блокноте.

Когда я пробую следующее и открываю в блокноте, я получаю двоичные данные … Я думаю, что это … не читается .

  X509Certificate2 cert = new X509Certificate2 ("c: \ myCert.pfx", "test", X509KeyStorageFlags.Exportable); File.WriteAllBytes ("c: \ testcer  .cer ", cert.Export (X509ContentType.Cert));  

Я попытался удалить ‘X509KeyStorageFlags.Exportable», но это не сработало. Я что-то упустил?

Изменить — я пробовал

  File.WriteAllText ("c: \ testcer.cer", Convert.ToBase64String (cert.Export (X509ContentType.Cert  )))  

, и это, похоже, работает, однако без «—— BEGIN CERTIFICATE ——» и «—— END CERTIFICATE-» —- «


Возможно

 //////Экспорт сертификата в формат PEM  string////// Сертификат для экспорта /// Строка в кодировке PEM  общедоступная статическая строка ExportToPEM (X509C  сертификат сертификата) {StringBuilder builder = new StringBuilder ();  builder.AppendLine ("----- НАЧАТЬ СЕРТИФИКАТ -----");  builder.AppendLine (Convert.ToBase64String (cert.Export (X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks));  builder.AppendLine ("----- КОНЕЦ СЕРТИФИКАТА -----");  return builder.ToString ();}  

попробуйте следующее:

  X509Certificate2 cerifikata = new X509Certificate2 ("C://certificate.pfx"); File.WriteAllBytes ("D://Test.cer", cerifikata.Export (X509ContentType. Cert));  

1


Для тех, кто реализует что-то подобное в .NET Core, вот код, основанный на том, что сделал тиранид. Base64FormattingOptions.InsertLineBreaks не существует в .NET Core, поэтому мне пришлось реализовать свой собственный способ разбиения строк.

 //Содержимое сертификатов содержит 64 символа на строку private const  int MaxCharactersPerLine = 64; //////Экспорт сертификата в строку формата PEM////// Сертификат для экспорта /// A  Строка в кодировке PEM  общедоступная статическая строка ExportToPem (этот сертификат X509Certificate2) {var builder = new StringBuilder ();  var certContentBase64 = Convert.ToBase64String (cert.Export (X509ContentType.Cert)); //Вычисляет максимальное количество строк, которое займет этот сертификат.  var certMaxNbrLines = Math.Ceiling ((двойной) certContentBase64.Length/MaxCharactersPerLine);  builder.AppendLine ("----- НАЧАТЬ СЕРТИФИКАТ -----");  for (var index = 0; index  certContentBase64.Length?  certContentBase64.Length - индекс * MaxCharactersPerLine: MaxCharactersPerLine;  builder.AppendLine (certContentBase64.Substring (индекс * MaxCharactersPerLine, maxSubstringLength));  } builder.AppendLine ("----- КОНЕЦ СЕРТИФИКАТА -----");  return builder.ToString ();  }  

1


//однако отсутствует » —— BEGIN CERTIFICATE —— «и» —— END CERTIFICATE —— «

Эти недостающие строки являются необязательными. CA может генерировать их или нет в зависимости от настроек. По всем практическим причинам они могут быть удалены из файла в кодировке Base64.

Оцените статью
clickpad.ru
Добавить комментарий