Как использовать OpenSSL для самозаверяющих сертификатов с пользовательским CA и правильными настройками SAN? - PullRequest
0 голосов
/ 02 мая 2020

Время от времени я перебираю эту топи c, пытаясь вспомнить, как это было сделано, затем снова нахожу все неполные ответы (с конфигурационными файлами, oneliners, игнорируя то, что мы действительно хотим использовать собственный CA для создания полная цепочка сертификатов et c.). И многие ответы применяют SAN для запроса сертификата, но портят SAN в команде подписи ...

Что я хочу сделать?

  1. Создание собственного ЦС
  2. Создание запроса на сертификат.
  3. Подписание запроса на сертификат.
  4. Создание файла цепочки
  5. Дополнительные шаги в Firefox / Chrome (да, Chrome требуется SAN)

(Да, пожалуйста, не делайте все в одной команде, я хочу, чтобы мой CA располагался на другой машине) ( Да, это может быть неполным для кого-то еще, но это именно то, что мне нужно 1-2 раза в год, когда простого самоподписанного сертификата в моей среде DEV, которому я просто доверяю по конфигурации, недостаточно) (Да, вы можете захотеть реализовать дополнительные шаги проверки, если вы не тот, кто запрашивает и подписывает сертификаты как одно лицо)

С уважением, Патрик

1 Ответ

0 голосов
/ 02 мая 2020

Предположим, мы хотим установить самозаверяющий сертификат для нашего нового сервера / хоста в нашей локальной сети, где Let's Encrypt не подходит для нас, например FRITZ! Box, домен: fritz.box, https://fritz.box, IPv4: 192.168.1.1

1.1 сгенерируйте закрытый ключ для вашего CA

openssl genrsa -aes256 -out patrickca.key 4096

о -aes128 или -aes256: https://security.stackexchange.com/q/14068

1.2 генерирует сертификат CA (root сертификат)

openssl req -new -key patrickca.key -x509 -out patrickca.crt -days 3650

2. создайте запрос сертификата вашего домена / сервера

openssl req -new -nodes -newkey rsa:4096 -keyout fritzbox.key -out fritzbox.req -batch -subj "/C=DE/ST=Hamburg/L=Hamburg/O=Patrick CA/OU=router/CN=fritz.box" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:fritz.box,IP:192.168.1.1"))

3. подписать запрос сертификата

openssl x509 -req -in fritzbox.req -CA patrickca.crt -CAkey patrickca.key -CAcreateserial -out fritzbox.crt -days 3650 -sha256 -extfile <(printf "subjectAltName=DNS:fritz.box,IP:192.168.1.1")

4. создать файл цепочки (вам может понадобиться дополнительный промежуточный сертификат в процессе вашей организации)

cat fritzbox.key > fritzboxchain.pem 
cat fritzbox.crt >> fritzboxchain.pem
cat patrickca.crt >> fritzboxchain.pem 

Вы импортировали бы этот файл в свою коробку FRITZ!, если бы это был не просто пример.

5. Дополнительные шаги в Firefox и Chrome (в настоящее время я не использую другие браузеры, и никто в моих организациях этого не делает)

Конечно, вы хотите подтвердить, что знаете, что делаете, если ваш браузер отображает предупреждающее сообщение о вашем сертификате https.

И вы, возможно, захотите установить это как постоянное исключение.

Но: импортируйте сертификат CA шага 1.2 как доверенный CA , (в 05/2020 должно быть достаточно для Firefox установки CN =, для Chrome может возникнуть проблема с SAN, если она все еще не возникает, кроме вашего самоподписанного сертификата)

...