Самозаверяющий сертификат: openssl 21 (невозможно проверить первый сертификат)

Я создал самозаверяющий сертификат в azure.

Сертификат установлен на машине с Ubuntu. Процесс:

sudo -s
cp <cert> /usr/share/ca-certificates
dpkg-reconfigure ca-certificates

dpkg-reconfigure показывает графический интерфейс.

введите здесь описание изображения

Я выбираю да, чтобы доверять сертификату. На следующей странице я вижу список сертификатов. Я выбираю свой сертификат (нажав клавишу space) и нажимаю ok (tab -> enter)

Сертификат успешно добавлен.

Но когда я запускаю openssl s_client -showcerts -connect <server>:<port>, я получаю Verify return code: 21 (unable to verify the first certificate)

Я протестировал этот локальный хост (mac OS X). Это работает после того, как я установил Always Trust для When using this certificate в разделе Trust сертификата. (Сертификат локально создается напрямую с помощью команд openssl)

openssl req  -new  -newkey rsa:2048  -nodes  -keyout localhost.key  -out localhost.csr
openssl  x509  -req  -days 365  -in localhost.csr  -signkey localhost.key  -out localhost.crt

Я использую сервер Golang, где этот сертификат используется с функцией ключа vai http.ListenAndServeTLS.

Процесс на Mac действительно прост. Просто перетащите сертификат в Keychain Access и доверяйте сертификату.

Для меня это главный блокатор. Я был бы очень признателен за помощь.


person user3508953    schedule 09.05.2021    source источник
comment
Убедитесь, что а) сертификат, показанный в выводе s_client, является именно тем, которому вы доверяете, и б) сертификат имеет базовые ограничения CA:true, т. е. является сертификатом CA (используйте openssl x509 -in file.csr -text)   -  person Steffen Ullrich    schedule 09.05.2021
comment
Показанный сертификат является тем, которому я доверяю. Но я вижу CA:FALSE. Как я могу преобразовать это в true?   -  person user3508953    schedule 09.05.2021
comment
Это самоподписанный сертификат. Может быть, поэтому CA установлен в false? Как я могу иметь самозаверяющий сертификат в списке доверенных, чтобы он работал?   -  person user3508953    schedule 09.05.2021
comment
самозаверяющие сертификаты могут быть созданы с CA:true и CA:false. Для проверки openssl требуется доверенный CA, а это означает, что самозаверяющий сертификат должен быть CA, то есть CA:true.   -  person Steffen Ullrich    schedule 09.05.2021
comment
Большое спасибо за ссылку и объяснение. Они очень полезны и отвечают на большинство из них. Вы упомянули здесь, что самозаверяющие сертификаты могут быть созданы с CA:true и CA:false. Не могли бы вы подсказать, как (какую команду) я могу использовать для создания самозаверяющего сертификата с CA:true, пожалуйста? Я надеюсь, что это решит проблему с ошибкой OpenSSL 21, и сервер Go начнет работать должным образом.   -  person user3508953    schedule 09.05.2021
comment
См., например, stackoverflow.com/questions/36920558/   -  person Steffen Ullrich    schedule 09.05.2021
comment
Как это делается в лазури, я не могу использовать предоставленный ими DNS. Мне нужно было получить собственный домен. Затем разместите этот домен на Azure, получите сертификат для личного домена, установите сертификат на Ubuntu. Теперь это работает.   -  person user3508953    schedule 16.05.2021
comment
Кстати, Штеффен, команда, которую ты дал openssl x509 -in file.crt -text, оказалась очень удобной. Большое спасибо за это.   -  person user3508953    schedule 16.05.2021