Работаем с ssl

В статье будет рассмотрено несколько простых моментов связанных с работой SSL/OpenSSL, а именно: генерация сертификатов, просмотр действия сертификата и прочее.

1) Генерация клиентских сертификатов.

#openssl req -new -newkey rsa:1024 -nodes -keyout CERT_NAME.key -subj /C=US/ST=ALASKA/L='Department'/O='Company Inc.'/OU=IT/CN=CERT_NAME/emailAddress=EMAIL -out CERT_NAME.csr
#openssl ca -config CERT_PATH/ca.config -in CERT_NAME.csr -out CERT_NAME.crt -batch

и вдобавок создание p12 сертификата (например, для Windows-клиентов)

#openssl pkcs12 -export -in CERT_NAME.crt -inkey CERT_NAME.key -certfile CERT_PATH/ca.crt -out CERT_NAME.p12 -passout pass:CERT_PASS

где CERT_NAME-имя сертификата без суффиксов, CERT_PATH — путь, где будут сохранены сертификаты (и где лежит корневой ca.crt), EMAILemail клиента

Если нужно сгенерировать p12-сертификат, но включить туда промежуточные сертификаты сервера, то делаем так:

#openssl pkcs12 -export -chain -in ./domain.com.crt -inkey ./domain.com.key -certfile ./trusted-chain.crt -out adobe.p12

где domain.com.crt, domain.com.key соответственно сертификат и ключ непосредственно домена, trusted-chain.crt все сертификаты промежуточных центров сертификации.

2) Просмотр срока действий сертификата

# openssl verify -CAfile ./ca.crt CERT_NAME.crt
CERT_NAME.crt: OK

Как видим, с сертификатом всё впорядке, а вот со следующим — нет (истёк срок действия):

# openssl verify -CAfile ./ca.crt CERT_NAME2.crt
CERT_NAME2.crt: C = US, ST = ALASKA, L = Department, O = Company Inc., OU = IT, CN = user.domain.com, emailAddress = user@domain.com
error 10 at 0 depth lookup:certificate has expired
OK

Можно получить расширенную информацию (в зависимости от того, какой типа сертификата вы хотите проверить, используйте соответствующую команду):

# openssl x509 -noout -text -in CERT_NAME.crt
# openssl rsa -check -in CERT_NAME.key
# openssl req -text -noout -verify -in CERT_NAME.csr
# openssl pkcs12 -info -in CERT_NAME.p12

3) renew(продление) crl сертификата

# openssl ca -gencrl -config ./ca.config -crldays 500 -out ./ca_new.crl

где путь к приватному сертификату берётся из конфига ./ca.config

  • продление корневого сертификата:

# openssl x509 -in ca.crt -days 3650 -out ca_new.crt -signkey ca.key

4) генерация wildcard-сертификата.

Сгенерируем пару ключ и сертификат csr:

# openssl req -new -newkey rsa:2048 -nodes -keyout domain_com_wildcard.key -out domain_com_wildcard.csr

При этом будут задаваться вопросы, когда спросит FQDN-сайта (домена), нужно ввести *.domain.com (именно со звёздочкой). А теперь собственно сам сертификат:

# openssl ca -config ca.config -in domain_com_wildcard.csr -out STAR_domain_com_wildcard.crt

Если получите сообщение, что файл ca.key не найден — перейдите в ту папку, где он лежит.

Собственно пара domain_com_wildcard.key и STAR_domain_com_wildcard.crt являются ключём и сертификатом, которые нужно указать в вашем web-сервере.

5) Отзыв сертификата.

Собственно отзыв:

# openssl ca -config ./ca.config -keyfile ca.key -cert ca.crt -revoke CERT_NAME.crt

Проверка, что отозвался (буква R вначале)

# grep CERT_NAME db/index.txt
R 141002153915Z 140123163840Z A8 unknown /C=AA/ST=AA/L=AA/O=AA/OU=IT/CN=CERT_NAME/emailAddress=CERT_NAME@domain.com

Перегерация CRL:

# openssl ca -config ./ca.config -keyfile ca.key -cert ca.crt -gencrl -out ca.crl

6) Полезные ссылки

  • Вот скрипты генерации сертификатов с различными условиями http://dadv.livejournal.com/201745.html
  • Создание цепочки https://debian.pro/2138

7) Проверка пары *.crt *.key

Ошибка вида (apache):

[error] Unable to configure RSA server private key
[error] SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch

означает, что *.key и *.crt от разных пар ключей. Что бы это проверить, выполним 2 команды и, если результаты MD5 суммы разные — значит это не одна пара.

$ openssl x509 -noout -modulus -in your_domain_com.crt | openssl md5
$ openssl rsa -noout -modulus -in your_domain_com.key | openssl md5
$ openssl req -noout -modulus -in your_domain_com.csr | openssl md5

8 ) Конвертация.

p12 (pcf) -> pem (один файл)

$ openssl pkcs12 -in skeletor.p12 -out skeletor.pem -nodes

p12 (pcf) -> pem (separate crt, key)

$ openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
$ openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes

DER (.crt .cer .der) -> PEM

$ openssl x509 -inform der -in MYCERT.cer -out MYCERT.pem

PEM -> DER (.crt .cer .der)

$ openssl x509 -outform der -in MYCERT.pem -out MYCERT.der

9) Генерация мульдоменного csr:

$ openssl req -new -key endpoint.com.key -sha256 -nodes
  -subj '/C=US/ST=New York/L=New York/O=End Point/OU=Hosting Team/CN=www.endpoint.com/
         emailAddress=administrative-not-existent-address@our-awesome-domain.com/
         subjectAltName=DNS.1=endpoint.com,
         DNS.2=usually-not-convered-domain.endpoint.com,
         DNS.3=multiple-domains-crt.endpoint.com' > www.endpoint.com.csr

Работаем с ssl: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *