Работа с сертификатами

Проверка сервиса на валидность сертификата:

openssl s_client -servername some-site.org -connect some-site.org:443 2>/dev/null | openssl x509 -noout -dates

для Windows /dev/null меняем на просто NUL

Вариант для скриптов мониторинга Zabbix (передаем в параметрах сайт и порт):

echo | openssl s_client -servername $1 -connect $1:$2 2>/dev/null | openssl x509 -noout -dates | grep notAfter | awk -F = '{ print $2 }' | awk 'BEGIN {OFS = "-"} {print $1,$2,$4}'

Проверка серта по датам и объкту:

openssl x509 -noout -dates -subject -in cert.pem

Проверка ключа:

openssl rsa -noout -text -in cert.pem

Тоже для запроса сертификата:

openssl req -noout -text -in cert.pem

Сравнить контрольные суммы ключа, серта и запроса:

# openssl rsa -noout -modulus -in server.key | openssl md5
# openssl x509 -noout -modulus -in server.crt | openssl md5
# openssl req -noout -modulus -in server.csr | openssl md5

Формирование самоподписного сертификата с ключом

openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt
  • req – это генерация запросов на подпись сертификата, но если мы задаём ключ “-x509”, это означает, что мы генерируем самоподписанный сертификат.
  • -newkey rsa:2048 –  если у нас ещё нет ключа, мы добавляем данный параметр, что бы ключ был создан автоматически. Указываем параметры ключа.
  • -days 365 – указываем количество дней,  в течении которых будет действовать данный сертификат.
  • -keyout  domain.key – параметр нужен, так как мы указали newkey и генерируем новый ключ. Указываем в какой фал положим ключ.
  • -out domain.crt – сюда положим наш сертификат.
  • -nodes – не шифровать ключ (без пароля).

Спасибо за подсказку: pechenek.net и losst.ru

При формировании серта для IP есть тонкость: IP пишем в SAN (Server Alternate Name). Для этого формируем файл конфигурации (допустим с именем san.cnf):

[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
countryName = XX
stateOrProvinceName = N/A
localityName = N/A
organizationName = Self-signed certificate
commonName = 120.0.0.1: Self-signed certificate

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = 127.0.0.1
IP.2 = 10.12.15.111

В команду формирования ключа добавить ключ указания на данный конфиг:
-config san.cnf

Конвертирование CRT/PEM в PFX

openssl pkcs12 -export -out cert-https.pfx -inkey domain.key -in FullChainBundle.pem