こんにちは、かずきです。
運用していたサイトが、SSLサーバー証明書の有効期限切れにより、HTTPSアクセスができなくなってしまいました。
有効期限が近づいたことを知らせるメールは届いていたのですが、つい対応を忘れてしまっていました。。。
有効期限が切れると、SSLの設定を一からやり直す必要があるようで、久しぶりの作業となるとすっかり手順を忘れていました。
そこで、次に同じことが起きても慌てないように、備忘録も兼ねてSSLを設定する方法を紹介します。
今回の環境は次の通りです。
- サーバー:ConoHa VPS
- OS:Ubuntu 22.04
- WEBサーバー:Apache 2.4.58
- SSLサーバー証明書:アルファSSL
それではよろしくお願いいます!
秘密鍵・公開鍵の作成
SSLを使うとインターネット上の通信が暗号化され、他人に見られないようにすることができます。その仕組みを実現するために「秘密鍵」と「公開鍵」の2つが必要になります。
まずはWEBサーバー側で「秘密鍵」と「公開鍵」を作成していきます。
秘密鍵の作成
- 作業用ディレクトリ(任意のディレクトリ)に移動します。
この手順では「/etc/apache2/ssl」で行います。
cd /etc/apache2/ssl/
- AES256で暗号化された2048ビットの秘密鍵を生成します。
openssl genrsa -aes256 -out server.key 2048
- パスワードの入力を求められるので、任意のパスワードを入力します。
Enter PEM pass phrase: (任意のパスワード)
Verifying - Enter PEM pass phrase: (任意のパスワード)
公開鍵の作成
- 先ほど作成した秘密鍵を使用して公開鍵を作成します。
openssl req -new -key server.key -out server.csr
- 公開鍵作成のための情報入力を求められるので、次の通りに入力します。
Enter pass phrase for server.key: (秘密鍵のパスワード)
Country Name (2 letter code)[XX]: JP
State or Province Name (full name)[XXXX]: (都道府県名)
Locality Name (eg, city) []: (空エンター)
Organization Name (eg, company)[XXXX]: (会社名)
Organizational Unit Name (eg, section)[]: (空エンター)
Common Name (e.g. server FQDN or YOUR name)[]: (サーバーのドメイン名 例: www.example.com)
Email Address[]: (空エンター)
A challenge password[]: (空エンター)
An optional company name[]: (空エンター)
公開鍵のコピー
- 作成した公開鍵ファイルを開きます。
cat server.csr
- 以下のような文字列が表示されるので、内容をすべてコピーします。
あとで使用するので、どこかにメモしておきましょう。
-----BEGIN CERTIFICATE REQUEST-----
MIICWjCCAUMCAQAwgYcxCzAJBgNVBAYTAkpQMQ8wDQYDVQQIDAZUb2t5bzEPMA0G
A1UEBwwGTWluYXRvMQ8wDQYDVQQKDAZNeUNvbTESMBAGA1UECwwJRGV2ZWxvcG1l
bnQxEjAQBgNVBAMMCGV4YW1wbGUuY29tMSAwHgYJKoZIhvcNAQkBFhFlbWFpbEBl
eGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK9vbzTr
kHZ2o9RfZf3vU1PGlE45p7MBEhdxY8qzNc2bxrZL0HQDZQc5zNxuOsN5yPywVfpS
b1NU+E/A07oxsSYIYXfTWQgX4MNGfQrPQyD8QtPLxNl8FDq3V0rUjFzSRmjaOZMa
2jqZEmGyxlXGj5D0Wo4rj2yd0aZzJ8KZsCV6FwNSDh3Zrc9kZfWhsmpH5R4b3b3a
Dx9dXx5azFjN0CrhLXxXXUlP3JhkeEzFxsP/Ak5nbmZmZlzfgshknY8mdXtgyT9R
2rAOrMh9xFq1bn4Zsjr8gMNl4GRs9yVX8dTziD6RMIYGp/IdZZ+kzNm38Yc3fJs8
6ovIN8WpndHIESECAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBmQ+LdLe5G3yXj
Ft5Gz1zC6ghOB9MI4gT+akl2dnT7PxB6b6jt3zA3GKwMx2zt2do1hC5qYnlcq9A7
8G9Y3VdSZf6BR0msW5Ej5YFUIbz56kx3UbVBaFfs8bmbkpQ1HXIbwMuWoaFbLTrD
kG6yzk6IQWk7g2zzNq5BzIzTO2fYOz/NsByv7NRPeqWABKMQWy4Cm9aBRQUTdtgI
J03DzXaTLBxGYYw/oXphHT52TwghjfwcdHg4kVTVlLVHt6Bk4Xn3VD6dWOh6fwp2
hrGCrTfC9/WmlF59Fp3ZNGc1Pb7vv0dLOdFDuOLR1JziXy1FmYGHUHvWTr53PiFR
rH5OtVbI
-----END CERTIFICATE REQUEST-----
SSLサーバー証明書の申し込み
次に先ほど取得した公開鍵を使用して、SSLサーバー証明書の申し込みを行います。
ここではConoHaのアルファSSLを例に解説していきます。
ConoHa VPSへログインする
- 下記のURLからConoHa VPSへログインします。
https://www.conoha.jp/login/
「SSLサーバー証明書リスト」画面を開く
- 左上のタブから「VPN」を選択して、VPNの画面を開きます。
- 左のリストの中から「セキュリティ」 -> 「SSL」を選択して、「SSLサーバー証明書リスト」画面を開きます。
SSLを購入する
- 「SSLサーバー証明書リスト」の右上の「SSL」を選択して「SSLサーバー証明書 申し込み」画面を開きます。
- 「SSLサーバー証明書 申し込み」画面で下記の設定を行い、「次へ」を選択します。
- プラン:アルファSSL
- デュアルアクセス:有効
ドメインに”www”がついていない場合は「無効」でも良いですが、将来的に”www”へのアクセスが必要になる可能性がある場合、「有効」にしておくことが良いです。 - 認証方法:DNS認証
認証用のメールアドレスやWEBページがある場合は他のものを選んでも良いです。
- 「公開鍵の作成」でコピーした公開鍵ファイルの内容を「CSR貼付」欄に入力して、「CSR内容確認」を選択します。
- 公開鍵作成の際に入力した内容が表示されるため、問題がなければ「次へ」を選択します。
- 申請担当者情報を入力して「次へ」を選択します。
- これまでの設定内容の確認を求められるので、問題がなければ「次へ」を選択します。
- 支払料金の確認を求められるので、問題がなければ「決定」を選択します。
DNS認証設定
先ほど発行したSSLが自分のものだと証明するために、自分のドメインに認証IDを設定します。
- 「設定先FQDN」からドメインを選択して、表示される「認証ID」をコピーします。
デュアルアクセス「有効」を選択した場合は、「wwwあり」と「wwwなし」の2つがあります。
- 左のリストの中から「DNS」を選択して、「ドメインリスト」画面を開きます。
- ドメインリストから対象のドメインの「>」を選択して、設定を展開します。
展開後、右側の鉛筆マークをクリックして、設定を編集できるようにします。
- 画面の下までスクロースして「+」をクリックして入力エリアを増やします。
①でコピーした認証IDを次の通りに入力して、保存を選択します。
- wwwあり
タイプ:TXT
名称:www
TTL:3600
値:①でコピーした値 - wwwなし
タイプ:@
名称:www
TTL:3600
値:①でコピーした値
- 左のリストの中から「セキュリティ」 -> 「SSL」を選択して、「SSLサーバー証明書リスト」画面を開く。
リストの中から申請中のSSLの「>」を展開して、認証方法の「詳しくはこちら」を選択します。
- 「設定先FQDN」からドメインを選択して、「認証依頼」を選択します。
- 完了が表示されたらDNS認証は完了です。
証明書のダウンロード
- DNS認証が完了したら、改めて左のリストから「セキュリティ」 -> 「SSL」を選択して「SSLサーバー証明書リスト」画面を開く。
- 画面が開いたら、申請が終わったSSLを展開する。
展開すると「証明書」ボタンが現れるため選択します。
- ダイアログが表示されたら、証明書種類の中から「中間証明書(ICA)」を選択して「はい」をクリックして証明書をダウンロードします。
「証明書(PEM)」も同じ方法でダウンロードします。
SSL証明書の配置
最後にダウンロードしたSSL証明書をサーバーに配置して、Apacheから証明書を見れるように設定していきます。
サーバー証明書の配置
- サーバーに戻り、作業用ディレクトリで下記のコマンドを実行してサーバー証明書を作成します。
vi server.crt
- ダウンロードしたファイルを「証明書(PEM)」「中間証明書(ICA)」の順で貼り付けてファイルを保存します。
-----BEGIN CERTIFICATE-----
「証明書(PEM)」の内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
「中間証明書(ICA)」の内容
-----END CERTIFICATE-----
Apacheの設定
- ApacheのSSL設定ファイルがあるディレクトリに移動します。
cd /etc/apache2/sites-available
- SSL設定ファイルを開きます。
vi ssl.conf
- VirtualHost *:443ディレクティブに下記の設定を追加します。
<VirtualHost *:443>
... 他の設定 ...
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
... 他の設定 ...
</VirtualHost>
動作確認
- Apacheを再起動します。
systemctl restart apache2
- 再起動すると下記のように秘密鍵のパスワードを求められるので、秘密鍵の作成で設定したパスワードを入力します。
Password entry required for 'Enter passphrase for SSL/TLS keys for exsample.com:443 (RSA):' (PID 2066658).
Please enter password with the systemd-tty-ask-password-agent tool.
- 対象のWEBページにアクセスして警告が出なければ成功です!
補足:SSLパスワードの解除方法
SSLの設定を行うと、Apacheを再起動するたびに秘密鍵のパスワードを要求されます。
毎回の入力が面倒な場合は、次の方法でパスワードなしの秘密鍵を作成できます。
- 秘密鍵を上書きして新しいパスワードなしの秘密鍵を作成するため、オリジナルの秘密鍵をバックアップしておきます。
cp server.key server.key.org
- 次のコマンドで秘密鍵のパスワードを解除します。
openssl rsa -in server.key -out server.key
- 次のようにパスワードを求められるので、秘密鍵の作成で設定したパスワードを入力します。
Enter pass phrase for server.key:
writing RSA key
これにより再起動の際にパスワードの入力を求められなくなります。
ただし、パスフレーズを解除したことでセキュリティリスクが上がるため、秘密鍵の扱いには注意してください。
まとめ
今回はアルファSSLの設定方法を解説しました。
頻繁に行う作業ではないため、いざその時が来るとやり方を忘れてしまいます。
そんな時のための参考になれば幸いでです。