Apache SSL: chứng chỉ máy chủ không bao gồm ID khớp với tên máy chủ


21

Tôi đang cố gắng thiết lập SSL trên máy chủ web apache2 của mình, nhưng có vẻ như nó hoàn toàn không hoạt động.

Tôi đã làm theo một hướng dẫn để tạo các tệp cert với openssl và được cấu hình /etc/apache2/sites-available/default-ssl.confđúng.

Mỗi lần tôi cố gắng mở trang web của mình bằng https, trình duyệt của tôi từ chối kết nối do vấn đề bảo mật. Nó nói rằng tôi đã không cấu hình trang web của tôi một cách chính xác.

Trong phần tôi /var/log/apache2/error.logđang nhận được cảnh báo, có nghĩa là chứng chỉ máy chủ của tôi không bao gồm ID trùng với tên máy chủ.

[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'

Bạn có bất cứ ý tưởng về cách giải quyết điều này? Cảm ơn liên quan!


Bạn đã sử dụng Apache 2.2 hay 2.4 chưa? Tôi đã nâng cấp từ 2.2 lên 2.4 và nhận được lỗi này. Trong trường hợp của tôi, nó không phải là một máy chủ công cộng, nó là một máy chủ nội bộ, vì vậy tôi đoán chứng chỉ tự ký sẽ làm được.
svhyd

Tôi đã sử dụng Apache 2.2 trên máy chủ công cộng (Debian 8) khi tôi gặp lỗi này. Sau khi chuyển sang Let Encript, lỗi đã biến mất nên tôi đoán đó là chứng chỉ tự ký đã gây ra lỗi.
pixelmusic

Câu trả lời:


7

Được rồi, tôi nhận thấy rằng bài đăng này được xem khá thường xuyên gần đây và vì vậy có vẻ như rất nhiều người đang phải đối mặt với cùng một vấn đề mà tôi đã làm. Nếu vậy thì điều này có thể giúp bạn.

Tôi đã làm theo hướng dẫn từng bước đơn giản để tạo chứng nhận SSL cho máy chủ web của mình. Giống như rất nhiều hướng dẫn ngoài kia, kết quả của hướng dẫn mà tôi đã theo dõi là một chứng chỉ tự ký bằng OpenSSL. Yep tự ký , đó là vấn đề. Trình duyệt không thể tin tưởng vào máy chủ do chứng chỉ được ký bởi chính nó. Chà, tôi cũng không làm ...

Giấy chứng nhận phải được ký bởi cơ quan chứng nhận đáng tin cậy bên ngoài (CA). Vì vậy, tôi tình cờ phát hiện ra Let Encrypt , công việc này phù hợp với bạn và thậm chí còn dễ dàng hơn để thiết lập và điều tốt nhất là: nó hoàn toàn miễn phí.

Cài đặt

1) Xóa các tệp ssl cert cũ mà bạn đã tạo bằng cách sử dụng OpenSSL

2) Mở backport để nhận certbot client trên Debian. Bạn nên biết rằng điều này sẽ mở ra một lỗ hổng cho phần mềm chưa hoàn thành! Chỉ cài đặt các gói khi bạn biết về những gì bạn đang làm.

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

3) Cập nhật hệ thống linux của bạn

sudo apt-get update

4) Cài đặt certbot

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

5) Thiết lập apache ServerName và ServerAlias

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

6) Chỉnh sửa tập tin cấu hình apache

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

7) Kiểm tra một cú pháp đúng

sudo apache2ctl configtest

8) Nếu tệp cấu hình trông ổn, khởi động lại máy chủ apache

sudo systemctl restart apache2

9) Thiết lập chứng chỉ bằng certbot và làm theo hướng dẫn trên màn hình.

sudo certbot --apache

Sự đổi mới

Tất cả các chứng chỉ của Let Encrypt có giá trị trong 3 tháng. Để gia hạn, bạn có thể tự chạy

sudo certbot renew

Hoặc tự động hóa dịch vụ này như một công việc định kỳ

sudo crontab -e

và nhập hàng sau để gọi đổi mới vào mỗi thứ Hai lúc 2:30 sáng.

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

Bạn có thể làm theo hướng dẫn chi tiết hơn tại đây: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8


Điều này không thể được sử dụng cho localhost (máy ảo trên mạng cục bộ), ý tôi là bạn cần mua một tên miền để sử dụng hãy mã hóa phải không?
lewis4u

1
có, máy chủ web của bạn phải được truy cập thông qua một tên miền đã đăng ký để mã hóa hoạt động.
pixelmusic

2

Nếu bạn không thấy lỗi SSL nào khác và nếu bạn đã thử cài đặt 'Gỡ lỗi LogLevel' trong tệp httpd.conf, thông báo lỗi này cũng có thể gợi ý 'Nghe 443' bị thiếu trong tệp httpd.conf.


Tôi hoàn toàn quên làm cho Apache nghe 443, nó chỉ nghe 80 lời cảm ơn
Robert

1

Đó không phải là lỗi - chúng là những cảnh báo. Hoàn toàn có thể chạy mod_ssl với chứng chỉ không khớp với tên máy chủ được xác định miễn là bạn có máy chủ ssl mặc định được xác định và tên chung trên chứng chỉ khớp với tên máy chủ được khách hàng sử dụng để kết nối.

Điều thứ hai dường như không đúng trong trường hợp của bạn. Như Jacob nói, bạn cần chỉ định tên máy chủ chính xác là tên chung (hoặc bí danh) khi bạn tạo CSR .

Để xem tên nào hiện đang có trên chứng chỉ:

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

Nếu có nhiều chứng chỉ được cài đặt trên máy và được phục vụ trên cùng một địa chỉ IP, thì:

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

(trong đó các giá trị $ {...} là các phần giữ chỗ bạn nên thay thế bằng các giá trị có liên quan).


(1), bạn nên đặt tên máy chủ trong CommonName trong CSR, nhưng cho dù đó là thực sự cần thiết (cho dù CA kiểm tra và / hoặc sao chép nó) phụ thuộc vào CA (2) openssl s_clientchương trình môn học và tổ chức phát hành đối với các CERT lá, đó là chỉ có một bạn cần ở đây, mà không -showcerts, nhưng đối với các cer -CA thực sự kể từ khoảng năm 2010 (và các certs DIY của những người có thẩm quyền ), những gì bạn cần xem không phải là chủ đề mà là phần mở rộng của SubjectAltName (SAN) và cho điều đó bạn cầnopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thedom_085

Lưu ý rằng từ giữa năm 2018, bạn cũng cần chỉ định tên DNS trong tên thay thế chủ đề nếu bạn muốn chứng chỉ của mình được xác thực chính xác trong các trình duyệt hiện đại.
symcbean

Tôi không biết về bất kỳ thay đổi nào trong năm 2018; Chrome đã yêu cầu SAN (cho cả DNS hoặc IP, mặc dù cái này hiếm khi được sử dụng) kể từ đầu năm 2017 và Firefox và IE (mà tôi vẫn coi là hiện đại) không yêu cầu ngày hôm nay - mặc dù như trước đây tôi đã nói các CA công khai đã cung cấp nó lâu hơn
dave_thndry_085

0

Gần đây tôi gặp vấn đề này, khi chứng chỉ tự ký của tôi hết hạn. Tôi googled và chỉ sao chép lệnh để tạo chứng chỉ mới từ một trang web.

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

Trong tập tin cấu hình apache của tôi: /etc/apache2/sites-av Available / default-sss.conf. Tệp chứng chỉ & tệp chính tham chiếu tên tệp sau.

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

Do đó, lỗi được thấy ở đây trong trường hợp của tôi đã được khắc phục dễ dàng hơn, chỉ bằng cách cung cấp vị trí chính xác của tệp khóa chứng chỉ khi tạo chứng chỉ ssl.

Vì vậy, đây là lệnh mà tôi nên sử dụng và gõ đúng.

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

0

Trong trường hợp của tôi, tôi đã giải quyết vấn đề này bằng cách thay thế trong tệp cấu hình ssl apache cho mỗi miền liên quan:

ServerName mydomain.com
ServerAlias www.mydomain.com

bởi:

ServerName www.mydomain.com
ServerAlias mydomain.com

Bởi vì chứng chỉ của tôi là dành cho "www.mydomain.com" chứ không phải cho "mydomain.com"

tập tin apache hoàn chỉnh:

<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

Chúng tôi đã phải thêm ServerName và ServerAlias ​​vào tệp ssl mặc định, không chỉ tệp conf cho tên miền cụ thể.
Điều này đã thoát khỏi lỗi pesky cho chúng tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.