Apache SSL:サーバー証明書には、サーバー名と一致するIDが含まれていません


21

私はapache2 WebサーバーでSSLを設定しようとしていますが、まったく機能しないようです。

チュートリアルに従ってopensslで証明書ファイルを作成し、/etc/apache2/sites-available/default-ssl.conf適切に構成しました。

httpsを使用してWebサイトを開こうとするたびに、セキュリティ上の問題により、ブラウザーが接続を拒否します。ウェブサイトを正しく設定していないと表示されます。

/var/log/apache2/error.logには、サーバー証明書にサーバー名と一致するIDが含まれていないという警告が表示されます。

[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にアップグレードすると、このエラーが発生しました。私の場合、それは公開サーバーではなく、内部サーバーなので、自己署名証明書で十分だと思います。
svhyd

このエラーが発生したとき、公開サーバー(Debian 8)でApache 2.2を使用していました。Let's Encriptに切り替えた後、エラーはなくなったので、エラーの原因は自己署名証明書であったと思います。
pixelmusic

回答:


7

さて、私はこの投稿が最近頻繁に表示されることに気付いたので、多くの人が私と同じ問題に直面しているようです。もしそうなら、これはあなたを助けるかもしれません。

WebサーバーのSSL証明書を作成するための簡単なステップバイステップチュートリアルに従っています。他の多くのチュートリアルと同様に、私が従ったチュートリアルの結果は、OpenSSLを使用した自己署名証明書でした。うん、自己署名した、それが問題でした。ブラウザは、自身で署名された証明書のためにサーバーを信頼できませんでした。まあ私はどちらもしません...

証明書は、外部の信頼できる認証局(CA)によって署名される必要があります。だから私はLet's Encryptに出会った。これはあなたのためにすべての仕事をしていて、セットアップがさらに簡単で、最高はそれは絶対に無料だ。

設置

1)OpenSSLを使用して作成した古いSSL証明書ファイルを削除します

2)Debianでcertbotクライアントを取得するためにバックポートを開きます。これにより、未完成のソフトウェアに穴が開くことを知っておく必要があります!実行していることを認識している場合にのみ、パッケージをインストールしてください。

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's Encryptによるすべての証明書は3か月間有効です。更新するには、手動で実行できます

sudo certbot renew

または、このサービスをcronジョブとして自動化します

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
はい。暗号化を機能させるには、登録済みのドメインを介してWebサーバーにアクセスできる必要があります。
pixelmusic

2

他のSSLエラーが表示されず、httpd.confファイルで「LogLevel debug」を設定しようとした場合、このエラーメッセージは「Listen 443」がhttpd.confファイルにないことを示唆する場合もあります。


私は完全にApacheはそれだけで80の感謝を聞いていた443を聞く作ることを忘れて
ロバート

1

これらはエラーではなく、警告です。デフォルトのsslホストが定義されていて、証明書の共通名がクライアントが接続に使用するホスト名と一致する限り、定義されたサーバー名と一致しない証明書でmod_sslを実行することはかなり可能です。

後者はあなたの場合には当てはまらないようです。Jacobが言っているように、CSRを作成するときに、正しいホスト名を共通名(またはエイリアス)として指定する必要があります。

現在証明書に記載されている名前を確認するには:

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

マシンに複数の証明書がインストールされており、同じIPアドレスで提供されている場合:

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

(ここで、$ {...}値は、関連する値で置き換える必要があるプレースホルダーです)。


(1)CSRのCommonNameにサーバー名を入力する必要がありますが、実際に必要かどうか(CAが確認またはコピーするかどうか)はCAに依存します(2)openssl s_clientリーフ証明書の件名と発行者を示します。あなたはせず、ここで必要な-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年の変更については知りません。Chromeは2017年初頭からSAN(DNS または IP、後者はめったに使用されません)を必要としており、FirefoxとIE(私はまだ現代だと思います)は今日それを必要としません-以前に言ったようにパブリックCAは提供しましたそれはずっと長い。
dave_thompson_085

0

最近、自己署名証明書の有効期限が切れたときに、この問題に遭遇しました。私はグーグルで検索して、1つのWebサイトから新しい証明書を作成するコマンドをコピーしました。

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

私の証明書は「mydomain.com」ではなく「www.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

特定のドメインのconfファイルだけでなく、serverNameとServerAliasをdefault-sslファイルに追加する必要がありました。
これにより、厄介なエラーがなくなりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.