Apache SSL: server cert tidak termasuk ID yang cocok dengan nama server

21

Saya mencoba mengatur SSL pada server web apache2 saya, tetapi tampaknya tidak berfungsi sama sekali.

Saya telah mengikuti tutorial untuk membuat file cert dengan openssl dan mengkonfigurasi dengan /etc/apache2/sites-available/default-ssl.confbenar.

Setiap kali saya mencoba membuka situs web saya dengan https, browser saya menolak untuk terhubung karena masalah keamanan. Dikatakan bahwa saya belum mengkonfigurasi situs web saya dengan benar.

Di saya, /var/log/apache2/error.logsaya mendapatkan peringatan, yang mengatakan bahwa sertifikat server saya tidak menyertakan ID yang cocok dengan nama server.

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

Apakah Anda punya ide untuk menyelesaikannya? Terima kasih dalam hal!

pixelmusic
sumber
Apakah Anda menggunakan Apache 2.2 atau 2.4? Saya memutakhirkan dari 2.2 ke 2.4 dan mendapatkan kesalahan ini. Dalam kasus saya ini bukan server publik, ini server internal, jadi saya rasa sertifikat yang ditandatangani sendiri akan berlaku.
svhyd
Saya menggunakan Apache 2.2 di server publik saya (Debian 8) ketika saya mendapatkan kesalahan ini. Setelah beralih ke Let's Encript kesalahannya hilang jadi saya kira itu adalah sertifikat yang ditandatangani sendiri yang menyebabkan kesalahan.
pixelmusic

Jawaban:

7

Oke, saya perhatikan bahwa posting ini dilihat cukup sering baru-baru ini dan sepertinya banyak orang menghadapi masalah yang sama seperti yang saya lakukan. Jika demikian maka ini mungkin membantu Anda.

Saya telah mengikuti tutorial langkah demi langkah sederhana untuk membuat sertifikasi SSL untuk server web saya. Seperti banyak tutorial di luar sana, hasil tutorial yang saya ikuti adalah sertifikat yang ditandatangani sendiri menggunakan OpenSSL. Ya ditandatangani sendiri , itu masalahnya. Peramban tidak dapat mempercayai server karena sertifikatnya yang ditandatangani dengan sendirinya. Yah aku juga tidak akan melakukan ...

Sertifikat harus ditandatangani oleh otoritas sertifikat eksternal (CA) yang dapat dipercaya. Jadi saya menemukan Let's Encrypt yang melakukan semua pekerjaan untuk Anda dan bahkan lebih mudah diatur dan yang terbaik adalah: itu benar-benar gratis.

Instalasi

1) Hapus file ssl cert lama Anda yang telah Anda buat dengan menggunakan OpenSSL

2) Buka backports untuk mendapatkan klien certbot di Debian. Anda harus tahu bahwa ini akan membuka lubang untuk perangkat lunak yang belum selesai! Instal hanya paket ketika Anda mengetahui tentang apa yang Anda lakukan.

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

3) Perbarui sistem linux Anda

sudo apt-get update

4) Instal certbot

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

5) Mengatur apache ServerName dan ServerAlias

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

6) Edit file konfigurasi apache

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

7) Periksa sintaks yang benar

sudo apache2ctl configtest

8) Jika file konfigurasi terlihat baik, mulai ulang server apache

sudo systemctl restart apache2

9) Siapkan sertifikat menggunakan certbot dan ikuti instruksi di layar.

sudo certbot --apache

Pembaruan

Semua sertifikat oleh Let's Encrypt berlaku hingga 3 bulan. Untuk memperbarui, Anda dapat menjalankannya secara manual

sudo certbot renew

Atau mengotomatisasi layanan ini sebagai pekerjaan cron

sudo crontab -e

dan masukkan baris berikut untuk meminta pembaruan setiap hari Senin pukul 2:30 pagi.

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

Anda dapat mengikuti tutorial yang lebih lengkap di sini: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8

pixelmusic
sumber
Ini tidak dapat digunakan untuk localhost (mesin virtual pada jaringan lokal), maksud saya Anda perlu membeli domain untuk menggunakan mari mengenkripsi, kan?
lewis4u
1
ya, server web Anda harus dapat diakses melalui domain terdaftar untuk mengenkripsi agar berfungsi.
pixelmusic
2

Jika Anda tidak melihat kesalahan SSL lainnya, dan jika Anda telah mencoba mengatur 'debugLogLevel' di file httpd.conf, pesan kesalahan ini juga dapat menyarankan 'Listen 443' hilang dari file httpd.conf.

BenjaminMinum
sumber
Saya benar-benar lupa untuk membuat Apache mendengarkan 443 itu hanya mendengarkan 80 terima kasih
Robert
1

Itu bukan kesalahan - itu adalah peringatan. Sangat mungkin untuk menjalankan mod_ssl dengan sertifikat yang tidak cocok dengan nama server yang ditentukan selama Anda memiliki host ssl default yang ditentukan dan nama umum pada sertifikat cocok dengan nama host yang digunakan oleh klien untuk terhubung.

Yang terakhir tampaknya tidak benar dalam kasus Anda. Seperti kata Jacob, Anda perlu menentukan nama host yang benar sebagai nama umum (atau alias) ketika Anda membuat CSR .

Untuk melihat nama apa yang saat ini ada di sertifikat:

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

Jika ada beberapa sertifikat yang diinstal pada mesin dan disajikan pada alamat IP yang sama, maka:

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

(di mana nilai $ {...} adalah placeholder yang harus Anda ganti dengan nilai yang relevan).

symcbean
sumber
(1) Anda harus meletakkan nama server di CommonName dalam CSR, tetapi apakah itu benar-benar diperlukan (apakah CA memeriksa dan / atau menyalinnya) tergantung pada CA (2) openssl s_clientmenunjukkan subjek dan penerbit untuk sertifikat daun, yang merupakan satu-satunya Anda perlu di sini, tanpa -showcerts, tetapi untuk sertifikat nyata-CA sejak sekitar 2010 (dan sertifikat DIY oleh orang yang kompeten ) apa yang perlu Anda lihat bukan subjek tetapi ekstensi SubjectAltName (SAN) dan untuk itu Anda perluopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085
Perhatikan bahwa mulai pertengahan 2018, Anda perlu menentukan nama DNS di nama alternatif subjek juga jika Anda ingin sertifikat Anda divalidasi dengan benar di peramban modern.
symcbean
Saya tidak tahu ada perubahan di 2018; Chrome telah meminta SAN (baik untuk DNS atau IP, meskipun yang terakhir jarang digunakan) sejak awal 2017, dan Firefox dan IE (yang saya masih anggap modern) tidak memerlukannya hari ini - meskipun seperti yang saya katakan sebelumnya CA publik telah menyediakan lebih lama.
dave_thompson_085
0

Saya mengalami masalah ini baru-baru ini, ketika sertifikat yang ditandatangani sendiri saya berakhir. Saya mencari di Google dan baru saja menyalin perintah untuk membuat sertifikat baru dari satu situs web.

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

Dalam file konfigurasi apache saya: /etc/apache2/sites-available/default-ssl.conf. File sertifikat & file kunci merujuk ke nama file berikut.

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

Oleh karena itu, kesalahan yang terlihat di sini dalam kasus saya lebih mudah diperbaiki, hanya dengan memberikan lokasi yang benar dari file kunci sertifikat saat membuat sertifikat ssl.

Jadi, inilah perintah yang seharusnya saya gunakan & ketik dengan benar.

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

Dalam kasus saya, saya telah menyelesaikan ini dengan mengganti file konfigurasi apache ssl saya untuk setiap domain yang bersangkutan:

ServerName mydomain.com
ServerAlias www.mydomain.com

oleh :

ServerName www.mydomain.com
ServerAlias mydomain.com

Karena sertifikat saya untuk "www.mydomain.com" dan bukan untuk "mydomain.com"

file apache lengkap:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin [email protected]
        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>
pengguna2267379
sumber
0

Kami harus menambahkan ServerName dan ServerAlias ​​ke file default-ssl, bukan hanya file conf untuk domain tertentu.
Ini menghilangkan kesalahan sial bagi kita.

Gayus Gracchus
sumber