Я пытаюсь получить сертификат удаленного сервера, который затем могу использовать для добавления в хранилище ключей и использования в моем приложении Java.
Старший разработчик (который в отпуске :() сообщил мне, что я могу запустить это:
openssl s_client -connect host.host:9999
Чтобы получить необработанный сертификат, который я могу затем скопировать и экспортировать. Я получаю следующий вывод:
depth=1 /C=NZ/ST=Test State or Province/O=Organization Name/OU=Organizational Unit Name/CN=Test CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
23177:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1086:SSL alert number 40
23177:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
Я также пытался с этой опцией
-showcerts
и этот (работает на Debian)
-CApath /etc/ssl/certs/
Но получите ту же ошибку.
Этот источник говорит, что я могу использовать этот флаг CApath, но он, похоже, не помогает. Я пробовал несколько путей безрезультатно.
Пожалуйста, дайте мне знать, где я иду не так.
источник
echo "" | openssl s_client -connect server:port -prexit 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'
stackoverflow.com/a/12918442/843000echo | openssl s_client -connect server:port 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
sed
сopenssl x509
, и читать его в использовании подоболочку:openssl x509 -in <(openssl s_client -connect server:port -prexit 2>/dev/null)
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
Хотя я согласен с ответом Ари (и проголосовал за него :), мне нужно было сделать дополнительный шаг, чтобы заставить его работать с Java в Windows (где его нужно было развернуть):
Перед добавлением
openssl x509 -outform DER
преобразования я получал сообщение об ошибке от keytool в Windows с жалобой на формат сертификата. Импорт файла .der работал нормально.источник
Оказывается, здесь сложнее: мне нужно было предоставить гораздо больше подробностей, чтобы начать работу. Я думаю, что это как-то связано с тем фактом, что это соединение, которое требует аутентификации клиента, и hankshake требовалось больше информации, чтобы перейти к этапу сброса сертификатов.
Вот моя рабочая команда:
Надеемся, что это толчок в правильном направлении для тех, кто мог бы получить больше информации.
источник
Однострочник для извлечения сертификата с удаленного сервера в формате PEM, на этот раз с использованием
sed
:источник
-servername
опцию, не знаю почему, но мне пришлось использовать его, чтобы получить полный сертификат.Самая простая командная строка для этого, которая включает вывод PEM для добавления его в хранилище ключей, а также вывод, читаемый человеком, а также поддерживает SNI, что важно, если вы работаете с сервером HTTP:
Опция -servername включает поддержку SNI, а текст openssl x509 печатает сертификат в удобочитаемом формате.
источник
Для того, чтобы получить сертификат удаленного сервера вы можете использовать
openssl
инструмент , и вы можете найти его междуBEGIN CERTIFICATE
иEND CERTIFICATE
который вам нужно скопировать и вставить в свой файл сертификата (CRT).Вот команда, демонстрирующая это:
Чтобы вернуть все сертификаты из цепочки, просто добавьте
g
(глобальный), например:Тогда вы можете просто импортировать файл сертификата (
file.crt
) в цепочку для ключей и сделать его доверенным, чтобы Java не жаловалась.В OS X вы можете дважды щелкнуть файл или перетащить его в свой брелок для доступа, чтобы он появился в логине / сертификатах. Затем дважды щелкните по импортированному сертификату и сделайте его Always Trust for SSL .
В CentOS 5 вы можете добавить их в
/etc/pki/tls/certs/ca-bundle.crt
файл (и запуститьsudo update-ca-trust force-enable
:), или в CentOS 6 скопировать их/etc/pki/ca-trust/source/anchors/
и запуститьsudo update-ca-trust extract
.В Ubuntu скопируйте их
/usr/local/share/ca-certificates
и запуститеsudo update-ca-certificates
.источник
источник
распечатать только цепочку сертификатов, а не сертификат сервера:
обновить доверие CA на CentOS / RHEL 6/7:
на CentOS / RHEL 5:
источник
Вы можете получить и сохранить корневой сертификат сервера, используя следующий скрипт bash:
Просто перезапишите обязательные переменные.
источник
Если ваш сервер почтовый сервер (MS Exchange или Zimbra) , может быть , вам нужно добавить
starttls
иsmtp
флаги:openssl s_client -starttls smtp -connect HOST_EMAIL:SECURE_PORT 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > CERTIFICATE_NAME.pem
Куда,
HOST_EMAIL - это домен сервера, например, mail-server.com.
SECURE_PORT - это порт связи, например, 587 или 465
Имя выходного файла CERTIFICATE_NAME (формат BASE 64 / PEM)
источник
В интересах других, таких как я, которые пытались следовать полезному совету при доступе к AWS CloudFront, но не смогли, нужно добавить хитрость
-servername domain.name..
.Источник: https://serverfault.com/a/780450/8972
источник