Сертификаты

Сертификаты позиционируются как “Удостоверения сервера”, то есть такие данные, которые позволяют однозначно аутентифицировать сервер и быть уверенным, что нас не перенаправили на фейковый сервер. Например, с целью получить какие-то приватные данные, типа номера кредитки.

Однако, сертификаты нам нужны для еще одной, более прозаической цели - шифрования трафика. То есть для того, чтобы наши данные проходили по сети в зашифрованном виде и никто не мог их снять, например, с промежуточного свитча, и, прогнав, например, через wireshark, получить наши коды, пароли и явки (и номера кредиток, в том числе).

Сгенерировать первый сертификат для сервера просто:

  1. Сперва создаем запрос на подписание сертификата центром сертификации, таким например, как www.sslforfree.com или www.cacert.org :
    cd /etc/ssl/; openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key

  2. В результате мы получаем два файла: privateKey.key - собственно закрытый ключ сервера, его мы никому не показываем и храним в безопасном месте (типа /etc/ssl/); второй - CSR.csr - это certificate Signing request, его мы скармливаем сайту www.sslforfree.com (или cacert.org, кому что больше нравится)
  3. На том же сайте получаем готовый серификат: на cacert.org и sslforfree.com - почти сразу, а на startssl.com - через некоторое время.

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

  1. Сертификаты не продлеваются, но можно получть новый сертификат на тот же ключ и с теми же данными:
    cd /etc/ssl/; rm CSR.csr; openssl req -out CSR.csr -key privateKey.key -new

  2. На том же cacert.org или startssl.com в окно CSR втыкаем новый запрос и получаем сертификат

Сертификат или CSR для нескольких доменов сразу

Эти “дополнительные” домены лучше всего задавать сразу в конфиге OpenSSL (можно в дополнительном файле, его все равно надо особо указывать openssl-ю).

Делаем файлик:

multidomain.cnf
[ v3_req ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = chroot.ru
DNS.2 = mail.chroot.ru
DNS.3 = www.chroot.ru
DNS.4 = dr.chroot.ru

После этого генерим CSR, в который включен данный конфиг:

openssl req -out OurCertRequest.csr -key OurKey.key -new -config /etc/openssl/multidomain.cnf

Самоподписной сертификат

Если кроме одного - двух человек, которым пофиг, что сертификат никем не гарантирован, на ваш сайт никто заходить не будет, то можно слепить самоподписной сертификат:

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

Я предпочитаю сделать это тремя более простыми командами, т.к. их легче запомнить:

openssl genrsa -out cert.key 2048
openssl req -new -key cert.key -out cert.csr
openssl x509 -req -days 1100 -in cert.csr -signkey cert.key -out cert.crt

Openssl create self-signed cert

Java-Cert

Java-программы используют контейнер типв keystore для хранения ключа и сертификата. Контейнер с самоподписным сертификатом лепится так:

keytool -genkey -v -alias ourdomain -keyalg RSA -validity 3650 -keysize 2048 \
-keystore ourdomaincert.jks -storepass [My strong password] -keypass [SAME strong password]

Но позже нам начинает хотеться использовать честный серт.

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

keytool -certreq -alias mydomain -keystore keystore.jks -file mydomain.csr

Теперь придется мудрить.

Конвертируем jks в PKCS12:

keytool -importkeystore -srckeystore ourdomaincert.jks -destkeystore ourdomaincert.p12 -deststoretype PKCS12

Вытаскиваем приватный ключ из PKCS12:

openssl pkcs12 -in ourdomaincert.p12 -out ourdomain.key -nodes -nocerts

Складываем из приватного ключа и полученного честного серта новый “честный” PKCS12:

openssl pkcs12 -export -name ourdomain -in ourdomain_signed.crt -inkey ourdomain.key -certfile CACert_bundle.crt -out ourdomaincert_signed.p12

Конвертируем PKCS12 в jks:

keytool -importkeystore -destkeystore ourdomaincert_signed.jks -srckeystore ourdomaincert_signed.p12 -srcstoretype pkcs12 -alias ourdomain

В новый JKS можно (и нужно) до кучи воткнуть честные рутовые серты от издателя нашего “честного” серта (я втыкал их CACert_bundle.crt на этапе создания p12):

keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks

Другие команды openssl

Где-то мне попадались (кажется, на lissyara.su) готовые команды для openssl, если найду - запощу сюда.

Вот одна ссылка, в принципе - нормально: http://www.sslshopper.com/article-most-common-openssl-commands.html

Java Keytool Keystore Commands

https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html

Keystore export key and cert:

keytool -importkeystore -srckeystore existing-store.jks -destkeystore new-store.p12 -deststoretype PKCS12

Keystore export cert:

keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks

Создать csr

keytool -certreq -alias mydomain -keystore keystore.jks -file mydomain.csr
unix/create_csr.txt · Last modified: 2017/06/06 16:59 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5