Рейтинг:0

На этом сайте отсутствует действительный доверенный сертификат || Веб-сервер Apache2, корневой ЦС Windows

флаг bh

Я изучаю сертификаты, HTTPS вместе, и через 4 дня я не знаю, как настроить, чтобы стать доверенным. В моей лаборатории env. У меня есть сервер Windows с ролью CA.

Ранее я установил VM-Dell OpenManage для своего сервера. Он имеет графический интерфейс для запросов и сертификат импорта для доступа по HTTPS. Я успешно сгенерировал запрос на подпись сертификата и получил сертификат с моего сервера ЦС Windows (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 CA из браузера https://x.x.x.x/certsrv/ и Запрос сертификата -> Расширенный запрос сертификата -> вставьте содержимое serverreq.csr -> WebserverTemplate. Загрузите сертификат.

3. Вернемся к Linux, мой файл конфигурации (/etc/apache2/sites-avaliable/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. После этого, если я открою веб-страницу, она говорит

Сертификат - отсутствует
На этом сайте отсутствует действительный доверенный сертификат (net::ERR_CERT_COMMON_NAME_INVALID).

Но если я открою OpenManage, он говорит

Сертификат - действующий и доверенный
Для подключения к этому сайту используется действительный доверенный сертификат сервера, выданный mydomain-DC-CA.

Оба сертификата принадлежат одному и тому же серверу ЦС Windows.

5. Пробовал настраивать /etc/ssl/openssl.cnf, но не очень понимаю как.Если я что-то редактирую, то ничего не работает.

Что не так с моей конфигурацией, как я могу ее настроить? Есть ли хороший учебник? В 90% случаев Google показывает только самозаверяющий сертификат и магию браузера. Но я хотел бы настроить его с помощью Windows CA.

Спасибо за помощь

Извините за мой английский.

Gerrit avatar
флаг cn
Можете ли вы показать результаты: `openssl x509 -subject -in /etc/ssl/certandkey/myservercert.crt -noout` и `openssl x509 -checkhost mysite.local -in /etc/ssl/certandkey/myservercert.crt -noout `?
Finaria avatar
флаг bh
У меня ошибка: `Имя хоста myserver НЕ соответствует сертификату`. Как я могу узнать, что такое имя хоста сертификата? `openssl x509 -in /etc/ssl/glpicertkey/glpiservercert.crt -text` с этим я не вижу имя хоста в сертификате. `root@myserver:/home/user# openssl x509 -checkhost myserver -in /etc/ssl/certandkey/servercert.crt -noout Имя хоста myserver НЕ соответствует сертификату root@myserver:/home/user# openssl x509 -subject -in /etc/ssl/certandkey/servercert.crt -noout subject=C = HU, ST = Венгрия, L = Город, O = mycompany, OU = IT, CN = mydomain.local`
Gerrit avatar
флаг cn
mydomain.local находится в CN, и это не соответствует mysite.local, поэтому совпадение не будет. Также вы должны включить записи DNS в альтернативные имена субъекта, чтобы увидеть, совпадают ли они. Я добавил эту информацию к своему ответу.
Рейтинг:0
флаг cn

Генерация

Вы можете использовать небольшой файл с расширением (utf-8), чтобы задать нужные записи и упростить создание CSR. Записи DNS должны быть punycode, если не ASCII. (https://www.rfc-editor.org/rfc/rfc3492)

[требуется]
биты по умолчанию = 2048
подсказка = нет
default_md = sha256
отличительное_имя = отличительное имя
req_extensions = доб.

[ доб ]
subjectKeyIdentifier=хэш
keyUsage = цифровая подпись, ключевое шифрование
subjectAltName = @alt_names

[alt_names]
DNS.1 = mysite.local
DNS.2 = www.mysite.local

[ дн ]
О=АКМЕ
НУ=ТЕСТИРОВАНИЕ
адрес электронной почты[email protected]
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 с помощью -дополнение

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 'Альтернативное имя субъекта:' -A 1

К сожалению, нет готового выходного коммутатора только для раздела SAN.

Это выглядит как:

            X509v3 Альтернативное имя субъекта:
                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

-имя сервера предназначен для выбора правильного виртуального хоста, если веб-сервер имеет несколько виртуальных хостов на порту 443.

Finaria avatar
флаг bh
Я запускаю команду: `openssl req -key sslcert.key -out sslcert.csr -config sslcert.cnf` Но в сертификате нет SAN, и после того, как я открываю сайт (F12), он говорит: «Сертификат - альтернативное имя субъекта отсутствует. Сертификат для этого сайта не содержит расширение SAN, содержащее доменное имя или IP-адрес». Если я добавлю вам эту команду, `-addext âsubjectAltName = DNS:*.mydomain.localâ` после этого появится SAN, без него нет. И я использовал файл sscert.conf, и он содержит конфигурацию SAN. Тогда почему он не используется? И отсутствие сертификата по-прежнему является проблемой.
Gerrit avatar
флаг cn
Не могли бы вы попробовать измененный файл конфигурации в моем ответе? Кажется, я зависел от некоторых базовых настроек в моем дистрибутиве openssl. У вас по-прежнему отсутствует сертификат, когда у вас есть правильные записи CN и DNS?
Finaria avatar
флаг bh
Все равно не повезло. Можете ли вы объяснить, как работает имя хоста? Я думаю, что это то, где я терплю неудачу. Имя хоста моего сервера — glpi.mylab.local. Мой DNS/AD — mylab.local. `[ альтернативные_имена ] DNS.1 = glpi.mylab.local DNS.2 = www.glpi.mylab.local` `[ дн ] ... CN = glpi.mylab.local` Если я чесхост для какой-то комбинации, то она всегда не совпадает. Что я делаю не так?
Finaria avatar
флаг bh
И это: `openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -config sslcert.cnf -utf8` работает, но в файле сертификата нет SAN. Только если я добавлю это к моей команде: `-addext âsubjectAltName = DNS:*glpi.mylab.localâ `
Gerrit avatar
флаг cn
*glpi не подходит, или вы пробовали здесь разметку? *.glpi.mylab.local может работать для варианта с www, но не для варианта без www.
Finaria avatar
флаг bh
Хай! Нет, все еще не работает. Мой файл конфигурации ssl выглядит так: `[требуется] биты по умолчанию = 2048 подсказка = нет default_md = sha256 отличительное_имя = отличительное имя req_extensions = доб. [ доб ] subjectKeyIdentifier=хэш keyUsage = цифровая подпись, ключевое шифрование subjectAltName = @alt_names [alt_names] DNS.1 = glpi.mylab.local DNS.2 = www.glpi.mylab.local [ дн ] адрес электронной почты = нет CN = mylab.local` Команда запроса: `openssl req -new -newkey rsa:2048 -nodes -keyout tsslkey.key -out tsslreq.csr -config sslcert.cnf -utf8`
Finaria avatar
флаг bh
Проверка ДНС: `openssl req -noout -text -in tsslreq.csr |grep DNS DNS: glpi.mylab.local, DNS: www.glpi.mylab.local` Adn все еще «На этом сайте отсутствует действительный доверенный сертификат (net::ERR_CERT_COMMON_NAME_INVALID)». имя хоста glpi.mylab.local Что не так?
Gerrit avatar
флаг cn
Интересно, есть ли второй _default_ vhost_ на порту 443 в Apache, переопределяющий ваш vhost.
Gerrit avatar
флаг cn
Вы проверяете CSR. Вы также проверили выданный сертификат?
Finaria avatar
флаг bh
Вы правы, я не проверял сертификат. Неверно: `X509v3 Альтернативное имя субъекта: другое имя:` Почему он генерируется таким образом, когда файл запроса в порядке? Нет другого виртуального хоста по умолчанию `a2dissite default-ssl.conf Сайт по умолчанию-ssl уже отключен`
Gerrit avatar
флаг cn
Ошибка другого имени может означать, что информация об имени DNS была сохранена центром сертификации в формате, не поддерживаемом openssl. Имена DNS должны быть IA5STRING. Но, если подумать, ошибка, похоже, указывает на то, что не выбран даже формат DNS-имени или что включено другое общее имя, которое не поддерживается. Возможно, посмотрите на вкладку «Имя субъекта» в вашем шаблоне выдачи SSL. Я подписал с помощью Windows CA файлы CSR openssl, и это всегда проходило довольно гладко, но может случиться так, что в используемом шаблоне есть операционные настройки, которые добавляют другую информацию, несовместимую с openssl.
Gerrit avatar
флаг cn
Также в качестве меры предосторожности убедитесь, что ваш конфигурационный файл openssl хранится в формате utf-8 или ascii и содержит только символы новой строки Unix.
Finaria avatar
флаг bh
Успех :). Я отказался от идеи сделать собственный файл ssl.cnf. Я использовал стандартный, но с -addtext SAN. Раньше я удалял "*" из subjectAltName. `openssl req -new -addext "subjectAltName = DNS:glpi.mylab.local" -newkey rsa:2048 -nodes -keyout testkey.key -out testreq.csr` После того, как я импортировал файл сертификата, появилась новая ошибка: «Активное содержимое с ошибками сертификата». Я только что очистил кеш браузера, и сертификат был принят, все зеленое. Спасибо за помощь и терпение.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.