Я изучаю сертификаты, HTTPS вместе, и через 4 дня я не знаю, как настроить, чтобы стать доверенным. В моей лаборатории env. У меня есть сервер Windows с ролью CA.
Ранее я установил виртуальную машину -Dell OpenManage для своего сервера. Он имеет графический интерфейс для запросов и сертификат импорта для доступа по HTTPS. Я успешно сгенерировал запрос на подпись сертификата и получил сертификат с моего сервера Windows CA (https://x.x.x.x/certsrv/). Это было сделано менее чем за 2 минуты.
Я подумал, что могу попробовать это на веб-сервере apache2 (Ubunut20.04 ). Ну, теперь я застрял и до сих пор не знаю, как заставить его работать.
1. В настоящее время (после ~50 запросов openssl )Я запросил сертификат с помощью этих команд:
openssl req -new -newkey rsa:2048 -nodes -addext “subjectAltName = DNS:*.mydomain.local” -keyout serverkey.key -out serverreq.csr
2. Я открыл свой сервер ЦС Windows из браузераhttps://x.x.x.x/certsrv/и запросил сертификат -->Расширенный запрос сертификата -->вставьте содержимое serverreq.csr -->WebserverTemplate. Загрузите сертификат.
3. Назад к Linux,мой файл конфигурации (/etc/apache2/sites -доступный/mysite.conf ):выглядит так.
<VirtualHost _default_:443>
Protocols h2 http/1.1
ServerName mysite.local
ServerAlias www.mysite.local
DocumentRoot /var/www/html/mysite
SSLEngine on
SSLCertificateFile /etc/ssl/certandkey/myservercert.crt
SSLCertificateKeyFile /etc/ssl/certandkey/myserverkey.key
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
<VirtualHost *:80>
ServerName mysite.local
Redirect / https://mysite.local/
</VirtualHost>
Нужно ли настраивать#цепочку сертификатов сервера :и #центр сертификации (ЦС ):?
4. После этого, если я открываю веб-страницу, она говорит
Certificate - missing
This site is missing a valid, trusted certificate (net::ERR_CERT_COMMON_NAME_INVALID).
, но если я открываю OpenManage, она говорит
Certificate - valid and trusted
The connection to this site is using a valid, trusted server certificate issued by mydomain-DC-CA
, что оба сертификата принадлежат одному и тому же серверу ЦС Windows.
5. Пытался настроить /etc/ssl/openssl.cnf, но не очень понял как. Если я что-то редактирую, то ничего не работает.
Что не так с моей конфигурацией, как мне ее настроить? Есть ли хороший учебник? В 90% случаев Google показывает только самоподписанный -сертификат и магию браузера. Но я хотел бы настроить его с помощью Windows CA.
Спасибо за помощь
Извините за мой английский.
Вы можете использовать небольшой файл с расширением (utf-8)для предустановки нужных записей и упрощения создания CSR. Записи DNS должны быть punycode, если не ASCII.(https://www.rfc-editor.org/rfc/rfc3492)
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = ext
[ ext ]
subjectKeyIdentifier=hash
keyUsage=digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = mysite.local
DNS.2 = www.mysite.local
[ dn ]
O=ACME
OU=TESTING
emailAddress=noreply@example.com
CN = mysite.local
Вы можете сохранить это, например, как sslcert.cnf
.
Замечания о подстановочных знаках
Вы можете использовать подстановочный знак, например *.example.com. Они работают только на одном уровне. foo.bar.example.com не будет покрываться *.example.com. Также *example.com не работает, звездочка должна быть в своем собственном компоненте домена.
Затем, если у вас еще нет закрытого ключа:
openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -config sslcert.cnf -utf8
Или, если у вас уже есть закрытый ключ sslcert.key
openssl req -key sslcert.key -out sslcert.csr -config sslcert.cnf -utf8
sslcert.csr
, будет вывод (, а также sslcert.key
в первом примере)
Вы также можете добавить subjectAltName раздел с-addext
openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -addext 'subjectAltName = DNS:example.com' -utf8
Вы можете использовать команду openssl, чтобы проверить, потенциально ли сертификат соответствует домену, который вы используете при просмотре
openssl x509 -in sslcert.crt -noout -checkhost example.com
Исторически запись CN в различающемся имени субъекта была используется при проверке имени хоста SSL. И он по-прежнему условно заполнен одним из доменов, но Chrome, например, не примет сертификат, в котором также не используется раздел Subject Alternative Names (SAN). И это также раздел, используемый для сертификатов с несколькими именами (, даже если вы используете только домен с www и без него,это уже сертификат с несколькими именами). Согласно нормам CA/Browser, любое имя, которое вы устанавливаете в CN, также должно быть включено в раздел альтернативных имен.
Вы можете увидеть их в выводе
openssl x509 -text -noout -in cert.crt | grep -F 'Subject Alternative Name:' -A 1
К сожалению, нет готового переключателя вывода только для раздела SAN.
Похоже на:
X509v3 Subject Alternative Name:
DNS:cert.local, DNS:cert.example.com
Чтобы узнать, возвращает ли ваш веб-сервер сертификаты и цепочки, (если у вас установлены промежуточные звенья), вы также можете использовать командную строку openssl (, возможно с самого веб-сервера).
openssl s_client -connect example.com:443 -servername example.com -showcerts
Если вы используете ЦС, не входящий в состав компьютера, на котором выполняется команда openssl, вы получите сообщение об ошибке проверки, но, по крайней мере, сможете увидеть возвращенные сертификаты.
В соединении вы также можете использовать IP-адрес -, поэтому, если веб-сервер находится на той же машине и также прослушивает петлю, вы можете сказать, что
openssl s_client -connect localhost:443 -servername example.com -showcerts
-servername
для выбора правильного виртуального хоста, если веб-сервер имеет несколько виртуальных хостов. на порту 443.