スマホから「志義ゼミナール」のサイトを閲覧しようとすると、セキュリティ警告が出てアクセスできない状態になっていました。その代わり、サイトへのログイン画面が表示され、「SSLで通信しようとしているが認証できないので、ログインIDとパスワードを入力してサイトにログインする」ようなメッセージが表示されました。まったく、ログインIDとパスワードには、覚えがありません。恐らくSSLの設定が間違っているのか、サーバ証明書(Let’s Encryptを利用)の設定にミスがあるのでしょう。

Let’s Encryptのサーバ証明書導入はここで行ったとおりで、その後なんのトラブルもなく運用できていました。単に、トラブルに気づかなっただけかもしれません。

ローカルにあるメンテナンス用のPCから「志義ゼミナール」のサイトを見ると、警告もなく普通に閲覧できます。また、スマホでサイト「志義どっとPC」は、普通に閲覧できます。(もちろん、警告は出ません。)

そこで、サイト「志義ゼミナール」のサーバ証明書を見てみました。

図1:webサイトはwww.shigizemi.comだが証明書でのドメインはpc.shigizemi.comとなっている。

図1:webサイトはwww.shigizemi.comだが証明書でのドメインはpc.shigizemi.comとなっている。

図1を見ると、webサイトはwww.shigizemi.comなのに、証明書のドメインはpc.shigizemi.comとなっている。つまり、サイトドメイン名と証明書のドメイン名が一致していない。サイト「志義どっとPC」では、サイトドメイン名もpc.shigizemi.comなので、認証に問題は発生しないようです。

apacheのvirtualhostを利用して、www.shigizemi.comとpc.shigizemi.comを運用しているので、こんな変なことが起きているのでしょうか。(いや、違うね。設定が違っているのです。きっと。)

さて、そもそも、志義ゼミナールのドメインはどうなっているのかwww.shigizemi.com、pc.shigizemi.comではありません。本来は、shigizemi.comです。wwwやpc部分はホスト名(サーバ機を区別するための名前です。)元は、サーバ機は1台のwebサーバ(apacheインストール)のみです。登録ドメインはshigizemi.comでwebサイトとしてはwww.shigizemi.comで運用しておりました。数年前より、virtualhostを利用してpc.shigizemi.comも追加したのです。

念の為に、ダイナミックDNSサービスを提供しているDynDNSで、確認してみました。(shigizemi.comはDynDNSに登録しています。)

図2:登録先のDynDNSに確認してみると

図2:登録先のDynDNSに確認してみると

ドメイン名は、shigizemi.comで、pc.shigizemi.comとwww.shigizemi.comのCNAMEはどちらもshigizemi.comとなっています。

これなら、図1で、証明書内のドメイン名はpc.shigizemi.comではなく、shigizemi.comとなっているべきです。
つまり、www.shigizemi.comでもpc.shigizemi.comでもサーバ証明書に記載されているドメインはshigizemi.comであるべきだとう思います。

さぁ、ここから、問題解決の始まりです。

【前提条件】

  1. webサーバ(apache)は正常に動作している。
  2. Let’d Encrypt関連モジュールは正常にインストールされている。

OSは、CentOS6.7(Final),apache,python,openssl等は正常に動作しているということです。

<手順>

  1. Let’s Encryptで運用できていたかを疑う。
  2. 各種設定ファイルを確認・修正。
  3. 動作確認。

〔番外編〕

  1. 大きな落とし穴

1.Let’s Encryptで運用できていたかを疑う

今まで、問題なく運用できていたというのは、私の思い違いです。たぶん、Let’s Encryptを導入後、スマホから「志義ゼミナール」のサイトを閲覧したことは、一度もなかったように思うのです。
しかも、ローカルのメンテ用PCからしか自サイトを閲覧していないことから、他ネットワークからの挙動が全くチェックできていませんでした。

別のネットワーク(Torネットワークを利用)から閲覧すると、サイト「志義ゼミナール」へは警告が出て、サイトの認証のためにログイン画面がスマホと同じように表示され、結局、閲覧できないようでした。

今回、スマホからアクセスして初めて気がついたので、設定ファイルを1から見直す必要があります。

しかし、初めてLet’s Encryptを導入したときに、サーバ証明書を確認したときはとくに警告は出ていませんでした。そのときのサーバ証明書に表示されていたドメイン名は確かwww.shigizemi.comだったかと。。。。はっきりとは思い出せません。

過去のことを今さらほじくり返してもしょうが無いので、さっそく、修正に入ります。

2.各種設定ファイルを確認・修正

apacheなので、sslなので、見直すべきconfファイルは大きく2種類です。httpd.confとssl.confです。さらに、 ssl.confは、www.shigizemi.com用とpc.shigizmei.com用の2種類が存在します。ここでは、それぞれを ssl_www.confとssl_pc.confと表記します。

サーバ機にsshで接続して作業を進めます。

(1)httpd.confの確認と修正

それらしい箇所は、ServerNameのwww.shigizemi.comをshigizemi.comに変えるところくらいしか修正を思いつきませんでした。

# vi /etc/httpd/conf/httpd.conf
ServerName shigizemi.com:80
#ServerName www.shigizemi.com:80

(2)ssl.confの確認と修正

ポイントは、CNAMEがshigizemi.comだったということから、ServerAlias shigizemi.comをssl_www.confとssl_pc.confに設定します。

# vi /etc/httpd/conf.d/ssl_www.conf
##
## SSL Virtual Host Context
##

<VirtualHost *:443>

# General setup for the virtual host, inherited from global configuration
DocumentRoot /usr/local/shigi/shigizemi
ServerName www.shigizemi.com:443

に、ServerAlias shigizemi.comを追記してみました。

##
## SSL Virtual Host Context
##

<VirtualHost *:443>

# General setup for the virtual host, inherited from global configuration
DocumentRoot /usr/local/shigi/shigizemi
ServerName www.shigizemi.com:443
ServerAlias shigizemi.com <<--追記

次に、ssl_pc.confの修正です。

aa[root@shigizemi ~]# vi /etc/httpd/conf.d/ssl_pc.conf
##
## SSL Virtual Host Context
##

<VirtualHost *:443>

# General setup for the virtual host, inherited from global configuration
DocumentRoot /usr/local/shigi/shigidtpc
ServerName pc.shigizemi.com:443
ServerAlias shigizemi.com <<--追記

apache再起動

# service httpd restart

3.動作確認。

では、動作確認をしてみます。

(1)サーバ証明書の更新

letsencrypt-autoを実行して、サーバ証明書を更新します。

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --webroot  -w /usr/local/shigi/shigizemi -d www.shigizemi.com \
-d w.shigizemi.com  -w /usr/local/shigi/shigidtpc -d pc.shigizemi.com -d p.shigizemi.com  \
-m shigi-info@shigizemi.com --agree-tos

とすると、次のような警告が出て、更新に失敗しました。

aaUpdating letsencrypt and virtual environment dependencies...You are using pip version 7.1.2, however version 8.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
.....
.....
.....
WARNING:certbot.cli:You are running with an old copy of letsencrypt-auto that does not receive updates, and is less reliable than more recent versions. We recommend upgrading to the latest certbot-auto script, or using native OS packages.

「pipが古い。letsencrypt-autoは古い。」という警告です。まぁ、エラーじゃないので普通はこれでも更新ができるはずですが、どうも正常に更新が終了しません。

そこで、警告通りに指示に従い、pipのアップデートとletsencryptからcertbotへの切り換えを実行しました。

# pip install --upgrade pip

実は、この後の処理をきちんとしなかったためちょっとドツボにはまります。(番外編へ)

次に、certbotのインストールです。letsencryptと同じディレクトリにインストールするので、/usr/localにcertbotのディレクトリをつくり、cloneでインストールします。

# mkdir /usr/local/certbot
# git clone https://github.com/certbot/certbot /usr/local/certbot
# cd /usr/local/certbot/

して、certbot-autoを実行し、証明書の更新を行います。

# ./certbot-auto certonly --webroot  -w /usr/local/shigi/shigizemi -d www.shigizemi.com -d w.shigizemi.com  -w /usr/local/shigi/shigidtpc -d pc.shigizemi.com -d p.shigizemi.com  -m shigi-info@shigizemi.com --agree-tos

しばらくすると、そのままか置き換えるかの確認画面が表示されます。「2」の置き換えるを選択し、「OK」のままEnterキーを押下します。

図3:「2」の置き換えを選択し、「OK」を押下する。

図3:「2」の置き換えを選択し、「OK」を押下する。

さらに、しばらく待つと、「Congratulations!」というメッセージが表示されて更新に成功します。

(2)サーバ証明書のドメイン確認

さっそく、www.shigizemi.comのサーバ証明書のドメイン名を確認します。

shigizemi.comとなっています。無事に終わりました。(でも、このあと落とし穴にはまります。詳しくは番外編で)