久しぶりに技術的なこと書きます。
このブログは基本的に音楽メディアなんですが、WEBサイトを運営していると技術的な話はつきものということもあり、最近ハマったことを、せっかくなので備忘も兼ねて書いておきます。
今回、沼にハマったのは「さくらVPS」で構築した、とあるWEBページをSSL対応するために、Let's Encryptを導入した時です。
さくらのVPSサイトに記載されている手順通りに進めていったのですが、見事にハマりました。
公式の手順通りに進めたのに…
今回、手順を確認していたのは、こちらのサイト。
ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」
ここで紹介されている手順に沿って進めていきましたが、最後のステップが完了してもWEBサイトには証明書エラーが表示されhttpsで接続できず…
いったいどこが悪いのか調べまわりましたが、足りない/修正する点は、以下の2つです!よくよく考えれば当たり前の話なのですが、久しぶりすぎてハマりました…。
1. バーチャルホストの設定をする
事前にバーチャルホストの設定をせず、さくらの公式サイトに記載されている手順通りに「certbot」を使って「Let’s Encrypt」のSSLを導入していくと、証明書インストール後に以下のアラートが表示されます。
※事前にバーチャルホストを設定していれば出ません。
Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain.
Please add a virtual host for port 80.
このアラートを解消するために、
# vim /etc/httpd/conf/httpd.conf
で「httpd.conf」ファイルを開き、編集モードに入ってから一番下に下記の内容を追加します。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin root@[あなたのドメイン]
DocumentRoot /var/www/html
ServerName [あなたのドメイン]
</VirtualHost>
追加が終わったら「:wq」で上書きして保存します。
どうでもよいのですが、さくらVPSの「シリアルコンソール」って、いつまでβ版なんでしょうね。
基本的に一般的なターミナルの操作と同じですが、設定ファイルを編集する時は「i」でインサートモードに入り、編集が終われば「esc」キーで編集モードを抜け出せます。
そして「:wq」で上書きして保存、保存したくないときは「:q!」で保存せずに終了です。
2. ssl.confファイルのパスを修正する
これが一番ハマったんですが、さくらの公式が紹介している手順通りに「mod_ssl」でSSLモジュールをインストールすると、ssl.confファイル内の証明書類がローカルホストに設定されています。
当たり前といえば当たり前なんですが、これ、気づくのに時間がかかってハマりました。ちゃんと証明書のパスを設定しましょう。
解決していくために、/etc/httpd/conf.d/ssl.confの内容を編集していきます。
#vim /etc/httpd/conf.d/ssl.conf
でssl.confファイルを開き、サーバー証明書ファイル(SSLCertificateFile)、秘密鍵ファイル(SSLCertificateKeyFile )、中間証明書(SSLCertificateChainFile)のそれぞれのパス、合計3箇所を変更します。
ssl.confファイル内から以下3箇所の記述を探し、
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
それぞれ
SSLCertificateFile /etc/letsencrypt/live/[設定したあなたのドメイン]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[設定したあなたのドメイン]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[設定したあなたのドメイン]/chain.pem
に変更します。
あとは、
# httpd -t
を実行して Syntax OKが出てエラーが無いことを確認し、変更した設定を反映するためにhttpdを再起動します。
# systemctl restart httpd
これでエラーが出力されなければ、httpdは正常に再起動しています。
ここまで反映して、再度SSLを設定したWEBサイトにhttpsアクセスすれば、正常にSSL接続できるはずです!
自分で設定した証明書類のパスを変更する、当たり前のことなのですが、ついつい見落としてハマってしまいました。同じようなハマり方をしないよう、誰かの約に立てればと思い&備忘録でした。