LINUX.ORG.RU

OpenSSL. Проблема с установкой корневого сертификата.

 , , ,


0

1

Доброго времени суток, уважаемые форумчане. Столкнулся с необходимостью тестировать свой сервер по протоколу HTTPS. Для этих целей решил использовать самоподписанный CA.

Для этого создал CA:

#Создал связку ключ/сертификат для CA openssl req -new -x509 -nodes -extensions v3_ca -keyout newca.key -out newca.pem -days 3650

#Создал новый ключ сервера openssl genrsa -out myserv.key 2048

#Создал запрос на подпись (в качестве cn указал имя домена) openssl req -new -key myserv.key -out myserv.csr

#Подписал запрос openssl x509 -req -in myserv.csr -CA newca.pem -CAkey newca.key -CAcreateserial -out myserv.crt -days 3650

Затем настроил nginx:

ssl_certificate /path/myserv.crt; ssl_certificate_key /path/myserv.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers «RC4:HIGH:!aNULL:!MD5:!kEDH»;

Проблема возникла при попытке установить CA сертификат (newca.pem) на клиентские устройства. Судя по информации с этой страницы: https://help.ubuntu.com/lts/serverguide/certificates-and-security.html Достаточно просто скопировать CA-сертификат(newca.pem) в /etc/ssl/certs/ однако должного результата это не приносит. Получаю ошибку сертификата при открытии из браузера и с помощью curl. Не могу понять в чём заключается проблема в неправильно установленном корневом сертификате на клиете или в генерации сертификатов? Заранее спасибо.

Достаточно просто скопировать CA-сертификат(newca.pem) в /etc/ssl/certs/

нет, не достаточно. нужно ещё что-то вроде вызова c_rehash

но лучше не выпендриваться а выполнить установку штатными средствами ОС. Для debian это

  • формат PEM, расширение - .crt
  • Скопировать в /usr/local/share/ca-certificates/
  • запустить скрипт установки sudo update-ca-certificates
  • убедиться, что сертификаты и ссылки появились в /etc/ssl/certs/ ls -l /etc/ssl/certs/ | grep -i $FILENAME
router ★★★★★ ()
Ответ на: комментарий от router

https://help.ubuntu.com/lts/serverguide/certificates-and-security.html

да, это мягко говоря странно - некорректная информация в официальной документации. когда настроишь у себя, пни убунтят, чтобы поправили ошибку

router ★★★★★ ()
Ответ на: комментарий от router

да, это мягко говоря странно - некорректная информация в официальной документации. когда настроишь у себя, пни убунтят, чтобы поправили ошибку

Обязательно. Но сначала настроить надо)

Doctor_Dark ()
Ответ на: комментарий от router

и ещё один момент. установка корневого сертификата в ОС повлияет только на тот софт, который уважает настройки ОС

например, wget так будет работать, firefox - нет

установка сертфиката в firefox выполняется отдельно, через preferences -> privacy -> view certificates не итересовался, можно ли это сделать автоматически

router ★★★★★ ()
Ответ на: комментарий от Doctor_Dark

Однако в парке есть девайсы у которых нет штатных средств. Поэтому и интересуюсь установкой «вручную».

после того, как скопируешь,

  • перейди в /etc/ssl/certs
  • выполни c_rehash .
  • убедись, что появились ссылки на новый сертификат
  • и окончательно проверка через curl/wget или openssl s_client
router ★★★★★ ()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Для потомков. В процессе установки соединения клиент получает от сервера сертификат. Openssl вычисляет его hash и ищет файл с соответствующим названием в /etc/ssl/certs. Для того чтобы установить сертификат его нужно скопировать в /etc/ssl/certs/ и выполнить c_rehash /etc/ssl/certs. c_rehash это perl-скрипт он получает хэши с помощью команды: openssl x509 -subject_hash -fingerprint -noout -in cert.pem openssl x509 -subject_hash_old -fingerprint -noout -in cert.pem

[b]2cb6c73c[/b] SHA1 Fingerprint=E3:E2:BC:CE:D4:46:FB:CF:AE:7A:62:CE:A7:33:91:14:CF:EA:2A:2E

Жирным выделен хэш.

Затем он создаёт симлинки на сертификат в папке /etc/ssl/certs/ с именем вида . где порядковый номер. В моём случае 2cb6c73c.0. Зная хэш можно создать симлинки вручную

https://docs.infor.com/ln/10.5/it-it/lnolh/help/tt/onlinemanual/https_soap_generate_hash.html

Doctor_Dark ()