Apache SSL: sunucu sertifikası, sunucu adı ile eşleşen kimliği içermiyor


21

Apache2 web sunucumda SSL kurmaya çalışıyorum, fakat hiç çalışmıyor gibi görünüyor.

Openssl ile sertifika dosyaları oluşturmak için bir rehber izledim ve /etc/apache2/sites-available/default-ssl.confdüzgün bir şekilde yapılandırdım .

Web sitemi https ile açmaya çalıştığımda, tarayıcım güvenlik nedeniyle bağlanmayı reddediyor. Web sitemi doğru bir şekilde yapılandırmadığımı söylüyor.

Benim içinde /var/log/apache2/error.logbenim sunucu sertifikası sunucusu adı ile eşleşen bir kimliği içermez demek uyarıları alıyorum.

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

Bunun nasıl çözüleceği hakkında bir fikriniz var mı? Saygılarımızla teşekkürler!


Apache 2.2 mi yoksa 2.4 mü kullanıyordunuz? 2,2'den 2,4'e yükselttim ve bu hatayı alıyorum. Benim durumumda bu kamuya açık bir sunucu değil, dahili bir sunucu, bu yüzden kendinden imzalı bir sertifikanın yapacağını tahmin ediyorum.
svhyd

Bu hatayı aldığımda ortak sunucumda (Debian 8) Apache 2.2 kullanıyordum. Let's Encript'e geçtikten sonra hata gitti, bu yüzden hataya neden olan kendinden imzalı bir sertifika sanırım.
pixelmusic

Yanıtlar:


7

Tamam, bu yazının son zamanlarda çok sık görüldüğünü fark ettim ve bu yüzden birçok insan benim yaptığım aynı sorunla karşı karşıya görünüyor. Eğer öyleyse, o zaman bu size yardımcı olabilir.

Web sunucum için SSL sertifikası oluşturmak için adım adım basit bir öğreticiyi takip ettim. Orada çok sayıda öğretici gibi, izlemiş olduğum öğreticinin sonucu, OpenSSL kullanarak kendinden imzalı bir sertifikaydı. Evet kendinden imzalı , sorun buydu. Tarayıcı, kendisi tarafından imzalanan sertifikası nedeniyle sunucuya güvenemedi. Ben de yapmam ...

Bir sertifikanın güvenilir bir dış sertifika yetkilisi (CA) tarafından imzalanması gerekir. Bu yüzden sizin için tüm işi yapan ve kurulması daha kolay olan ve en iyisi olan Let's Encrypt'a rastladım : tamamen ücretsiz.

Kurulum

1) OpenSSL kullanarak oluşturduğunuz eski ssl cert dosyalarınızı silin

2) Debian'da sertifika sahibi müşteriyi almak için destekleri açın. Bunun bitmemiş yazılım için bir delik açacağını bilmelisin! Ne yaptığınızı bildiğiniz zaman yalnızca paketleri yükleyin.

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

3) linux sisteminizi güncelleyin

sudo apt-get update

4) certbot yükleyin

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

5) apache'yi ayarlayın ServerName ve ServerAlias

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

6) Apache yapılandırma dosyasını düzenleyin

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

7) Doğru bir sözdizimi olup olmadığını kontrol edin

sudo apache2ctl configtest

8) Eğer yapılandırma dosyası iyi görünüyorsa, apache sunucusunu yeniden başlatın

sudo systemctl restart apache2

9) Sertifika kullanarak bir sertifika kurun ve ekrandaki talimatları izleyin.

sudo certbot --apache

yenilenme

Let's Encrypt'ya ait tüm sertifikalar 3 ay boyunca geçerlidir. Yenilemek için el ile çalıştırabilirsiniz

sudo certbot renew

Veya bu hizmeti bir cron işi olarak otomatikleştirin

sudo crontab -e

ve her pazartesi saat 2: 30'da yenilemeyi başlatmak için aşağıdaki satıra girin.

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

Burada daha ayrıntılı bir öğreticiyi takip edebilirsiniz: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8


Bu localhost için kullanılamaz (yerel ağdaki sanal makine), hadi şifrelemek için kullanacağınız bir etki alanı satın almanız gerekiyor demek?
lewis4u

1
evet, web sunucunuza, şifrelemenin çalışabilmesi için kayıtlı bir etki alanı üzerinden erişilebilir olması gerekir.
pixelmusic

2

Başka bir SSL hatası görmüyorsanız ve httpd.conf dosyasında 'LogLevel debug' ayarını denediyseniz, bu hata mesajı httpd.conf dosyasında 'Listen 443' ifadesinin eksik olduğunu da söyleyebilir.


Apache'nin 443 dinlemesini tamamen unuttum, sadece 80 dinlemiş oldu
Robert

1

Bunlar hata değil, uyarılar. Tanımlı bir ssl ana bilgisayarına sahip olduğunuz ve sertifikadaki ortak ad, istemciler tarafından bağlanmak için kullanılan ana bilgisayar adı ile eşleştiği sürece, tanımlanmış sunucu adlarıyla eşleşmeyen bir sertifika ile mod_ssl çalıştırmak oldukça mümkündür.

İkincisi sizin durumunuzda doğru görünmüyor. Jacob'un dediği gibi, bir CSR oluştururken doğru ana bilgisayar adını ortak ad (veya bir diğer ad) olarak belirtmeniz gerekir .

Sertifikada hangi adların bulunduğunu görmek için:

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

Makinede yüklü ve aynı IP adresinde sunulan birden fazla sertifika varsa, o zaman:

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

($ {...} değerlerinin yer tutucu olduğu yerlerde, ilgili değerlerle değiştirmeniz gerekir).


(1) Eğer gereken CSR COMMONNAME sunucu adını koymak, ama aslında (CA çekler ve / veya kopyaları da olsun) CA (2) bağlıdır gerekli olup olmadığını openssl s_clienttek yaprak sertifikası için gösteriler konu ve veren kuruluş, Buraya ihtiyaç duymadan -showcerts, ancak 2010'dan beri gerçek CA sertifikaları için (ve yetkin insanlar tarafından yapılan DIY sertifikaları için) bakmanız gereken şey tabi değil tabi KonuAltName (SAN) uzantısı ve bunun içinopenssl s_client -connect h:p [-servername h] | openssl x509 -noout -text
dave_thompson_085

2018 ortalarından itibaren, sertifikanızın modern tarayıcılarda doğru şekilde doğrulanmasını istiyorsanız, konu alternatif adlarında DNS adını da belirtmeniz gerektiğini unutmayın.
symcbean

2018’de herhangi bir değişiklik olduğunu bilmiyorum; Chrome, 2017'nin başından beri SAN'ı ( ikincisi nadiren kullanılmasına rağmen) ya da IP için gerekliydi ve daha önce kamuya açık CA'lar sağladığımı söylediğim gibi çok daha uzun.
dave_thompson_085

0

Son zamanlarda, kendinden imzalı sertifikamın süresi dolduğunda bu sorunla karşılaştım. Googled ve sadece bir web sitesinden yeni bir sertifika oluşturma komutunu kopyaladım.

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

Apache yapılandırma dosyamda: /etc/apache2/sites-available/default-ssl.conf. Sertifika dosyası ve anahtar dosyası aşağıdaki dosya adına atıfta bulunur.

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

Bu nedenle, benim durumumda burada görülen hata, sadece ssl sertifikasını oluştururken sertifika anahtar dosyasının doğru konumunu sağlayarak daha kolay düzeltildi.

Yani, işte benim doğru kullanıp kullanmam gereken komut.

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

0

Benim durumumda bunu, ilgili her etki alanı için apache ssl config dosyamda değiştirerek çözdüm:

ServerName mydomain.com
ServerAlias www.mydomain.com

tarafından :

ServerName www.mydomain.com
ServerAlias mydomain.com

Sertifikam "www.domain.com" için ve "doalan.com" için değil.

apache dosyasını tamamla:

<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 ve ServerAlias'ı, yalnızca belirli etki alanının conf dosyasını değil, default-ssl dosyasına eklemek zorunda kaldık.
Bu bizim için sinir bozucu hatadan kurtuldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.