Apache SSL: cert сервера не включає ідентифікатор, який відповідає імені сервера


21

Я намагаюся налаштувати SSL на своєму веб-сервері apache2, але, здається, він взагалі не працює.

Я дотримувався підручника для створення cert-файлів з openssl та налаштованим /etc/apache2/sites-available/default-ssl.confналежним чином.

Кожен раз, коли я намагаюся відкрити свій веб-сайт за допомогою https, мій браузер відмовляється від підключення через проблеми безпеки. Це говорить про те, що я не налаштував свій веб-сайт правильно.

В моєму /var/log/apache2/error.logзаписі я отримую попередження, в яких йдеться про те, що мій сертифікат сервера не містить ідентифікатора, який відповідає імені сервера.

[Mon Apr 10 11:03:24.041813 2017] [mpm_prefork:notice] [pid 1222] AH00169: caught SIGTERM, shutting down
[Mon Apr 10 11:03:30.566578 2017] [ssl:warn] [pid 661] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.579088 2017] [ssl:warn] [pid 1194] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.592958 2017] [mpm_prefork:notice] [pid 1194] AH00163: Apache/2.4.25 (Raspbian) OpenSSL/1.0.2k configured -- resuming normal operations
[Mon Apr 10 11:03:31.593136 2017] [core:notice] [pid 1194] AH00094: Command line: '/usr/sbin/apache2'

Чи є у вас ідеї, як це вирішити? Спасибі з повагою!


Ви використовували Apache 2.2 або 2.4? Я оновив з 2.2 до 2.4 і отримав цю помилку. У моєму випадку це не загальнодоступний сервер, це внутрішній, тому я здогадуюсь, що сертифікат самопідписаний зробить.
svhid

Я використовував Apache 2.2 на своєму публічному сервері (Debian 8), коли отримав цю помилку. Після переходу на «Давайте шифруємо» помилку не було, тому я гадаю, що саме підписаний сертифікат викликав помилку.
піксельмузик

Відповіді:


7

Гаразд, я помітив, що цей пост переглядають досить часто останнім часом, і тому здається, що багато людей стикаються з тим же питанням, що і я. Якщо так, то це може вам допомогти.

Я дотримувався простий покроковий посібник, щоб створити SSL-сертифікацію для свого веб-сервера. Як і в багатьох навчальних посібниках, підсумком підручника, за яким я слідував, був самопідписаний сертифікат з використанням OpenSSL. Так самозаверяющімі , що була проблема. Браузер не міг довіряти серверу через його сертифікат, який підписує сам. Ну, я б і не зробив ...

Сертифікат повинен бути підписаний зовнішнім надійним сертифікаційним органом (CA). Тож я натрапив на Let’s Encrypt, який виконує всю роботу для вас і ще простіше налаштувати, і найкраще: це абсолютно безкоштовно.

Установка

1) Видаліть свої старі файли ssl cert, які ви створили за допомогою OpenSSL

2) Відкрийте спини, щоб отримати клієнт-сервер на Debian. Ви повинні знати, що це відкриє отвір для незавершеного програмного забезпечення! Встановлюйте пакети лише тоді, коли вам відомо про те, що ви робите.

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list

3) Оновіть вашу систему Linux

sudo apt-get update

4) Встановіть certbot

sudo apt-get install python-certbot-apache -t jessie-backports

5) Налаштування apache ServerName та ServerAlias

sudo nano /etc/apache2/sites-available/000-default.conf

6) Відредагуйте конфігураційний файл apache

<VirtualHost *:80>
    . . .
    ServerName example.com
    ServerAlias www.example.com
    . . .
</VirtualHost>

7) Перевірте правильність синтаксису

sudo apache2ctl configtest

8) Якщо конфігураційний файл виглядає нормально, перезавантажте сервер apache

sudo systemctl restart apache2

9) Налаштуйте сертифікат за допомогою certbot та дотримуйтесь інструкцій на екрані.

sudo certbot --apache

Поновлення

Усі сертифікати компанії Let Encrypt дійсні протягом 3 місяців. Для відновлення можна запустити вручну

sudo certbot renew

Або автоматизувати цю послугу як роботу з кроном

sudo crontab -e

і введіть наступний рядок, щоб викликати оновлення щопонеділка о 2:30.

. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Більш докладний підручник ви можете прочитати тут: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8


Це не можна використовувати для localhost (віртуальної машини в локальній мережі), я маю на увазі, що вам потрібно придбати домен, щоб використовувати шифрування, так?
lewis4u

1
так, ваш веб-сервер повинен бути доступний через зареєстрований домен, щоб ми шифрували його для роботи.
піксельмузик

2

Якщо ви не бачите жодних інших помилок SSL, і якщо ви спробували встановити "Налагодження LogLevel" у файлі httpd.conf, це повідомлення про помилку також може припустити, що файл "Listen 443" відсутній у файлі httpd.conf.


я зовсім забуваю змусити Apache слухати 443, він слухав лише 80 подяк
Роберт

1

Це не помилки - це попередження. Цілком можливо запустити mod_ssl з сертифікатом, який не відповідає визначеним іменам серверів, якщо у вас визначено хост ssl за замовчуванням і загальне ім'я сертифіката відповідає імені хоста, використовуваному клієнтами для підключення.

Останнє не здається істинним у вашому випадку. Як каже Яків, під час створення CSR потрібно вказати правильне ім’я хоста як загальне ім'я (або псевдонім) .

Щоб побачити, які імена (імена) наразі є у сертифікаті:

openssl s_client -showcerts -connect ${HOSTNAME}:443

Якщо на пристрої встановлено кілька сертифікатів і подаються на одну і ту ж IP-адресу, то:

openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}

(де знаки $ {...} є заповнювачами, їх слід замінити відповідними значеннями).


(1) слід вказати ім'я сервера в CommonName в CSR, але чи воно дійсно потрібно (чи перевіряє ЦС та / або копіює це), залежить від CA (2), openssl s_clientпоказує суб'єкта та емітента для листа cert, який є єдиним Вам знадобиться тут, без -showcerts, але для справжніх сертифікатів CA з приблизно 2010 року (і DIY-сертифікати компетентними людьми), на що вам потрібно звернути увагу, це не тематика, а розширення SubjectAltName (SAN), і для цього вам потрібноopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085

Зауважте, що з середини 2018 року вам потрібно вказати ім'я DNS в альтернативних іменах тематики, якщо ви хочете, щоб ваш сертифікат був правильно перевірений у сучасних браузерах.
symcbean

Я не знаю жодних змін у 2018 році; Хром потрібно SAN (або для DNS або IP, хоча останній рідко використовуються) з початком 2017 року, а Firefox і IE (який я до сих пір вважаю сучасним) не вимагають сьогодні - хоча , як я вже говорив раніше громадські центри сертифікація надали це набагато довше.
dave_thompson_085

0

Я зіткнувся з цією проблемою недавно, коли термін дії мого самопідписаного сертифікату закінчився. Я гуглив і просто скопіював команду для створення нового сертифіката з одного веб-сайту.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/apache2/ssl/apache.crt

У моєму конфігураційному апараті apache: /etc/apache2/sites-available/default-ssl.conf. Файл сертифіката та файл ключа відносяться до наступного імені файлу.

    SSLCertificateFile  /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Отже, помилку, яку ми бачимо тут у моєму випадку, було легше виправити, просто надавши правильне розташування файлу ключа сертифіката під час створення сертифіката ssl.

Отже, ось команда, яку я повинен був правильно використати та набрати.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

0

У моєму випадку я вирішив це, замінивши у своєму конфігураційному файлі apache ssl для кожного відповідного домену:

ServerName mydomain.com
ServerAlias www.mydomain.com

автор:

ServerName www.mydomain.com
ServerAlias mydomain.com

Тому що мій сертифікат призначений для "www.mydomain.com", а не для "mydomain.com"

повний файл apache:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin noreply@mydomain.com
        ServerName www.mydomain.com
        ServerAlias mydomain.com
    DocumentRoot /home/mydomain.com/public_html
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|ico|png)$ \ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ \no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    <Directory />
        Options +FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /home/mydomain.com/public_html>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>


ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

0

Ми повинні були додати ServerName та ServerAlias ​​до файлу ssl за замовчуванням, а не лише конф-файлу для конкретного домену.
Це позбулося насмішкової помилки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.