開発ツール

Ubuntu環境(ConoHa VPS)でのSSL設定方法を解説【Apache 2.4対応】

こんにちは、かずきです。
運用していたサイトが、SSLサーバー証明書の有効期限切れにより、HTTPSアクセスができなくなってしまいました。

有効期限が近づいたことを知らせるメールは届いていたのですが、つい対応を忘れてしまっていました。。。

有効期限が切れると、SSLの設定を一からやり直す必要があるようで、久しぶりの作業となるとすっかり手順を忘れていました。

そこで、次に同じことが起きても慌てないように、備忘録も兼ねてSSLを設定する方法を紹介します。

今回の環境は次の通りです。

  • サーバー:ConoHa VPS
  • OS:Ubuntu 22.04
  • WEBサーバー:Apache 2.4.58
  • SSLサーバー証明書:アルファSSL

それではよろしくお願いいます!

秘密鍵・公開鍵の作成

SSLを使うとインターネット上の通信が暗号化され、他人に見られないようにすることができます。その仕組みを実現するために「秘密鍵」と「公開鍵」の2つが必要になります。

まずはWEBサーバー側で「秘密鍵」と「公開鍵」を作成していきます。

秘密鍵の作成

  1. 作業用ディレクトリ(任意のディレクトリ)に移動します。
    この手順では「/etc/apache2/ssl」で行います。
cd /etc/apache2/ssl/

  1. AES256で暗号化された2048ビットの秘密鍵を生成します。
openssl genrsa -aes256 -out server.key 2048

  1. パスワードの入力を求められるので、任意のパスワードを入力します。
Enter PEM pass phrase: (任意のパスワード)
Verifying - Enter PEM pass phrase: (任意のパスワード)

公開鍵の作成

  1. 先ほど作成した秘密鍵を使用して公開鍵を作成します。
openssl req -new -key server.key -out server.csr

  1. 公開鍵作成のための情報入力を求められるので、次の通りに入力します。
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[]: (空エンター)

公開鍵のコピー

  1. 作成した公開鍵ファイルを開きます。
cat server.csr

  1. 以下のような文字列が表示されるので、内容をすべてコピーします。
    あとで使用するので、どこかにメモしておきましょう。
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へログインする

  1. 下記のURLからConoHa VPSへログインします。
    https://www.conoha.jp/login/

「SSLサーバー証明書リスト」画面を開く

  1. 左上のタブから「VPN」を選択して、VPNの画面を開きます。
  1. 左のリストの中から「セキュリティ」 -> 「SSL」を選択して、「SSLサーバー証明書リスト」画面を開きます。

SSLを購入する

  1. 「SSLサーバー証明書リスト」の右上の「SSL」を選択して「SSLサーバー証明書 申し込み」画面を開きます。
  1. 「SSLサーバー証明書 申し込み」画面で下記の設定を行い、「次へ」を選択します。
  • プラン:アルファSSL
  • デュアルアクセス:有効
    ドメインに”www”がついていない場合は「無効」でも良いですが、将来的に”www”へのアクセスが必要になる可能性がある場合、「有効」にしておくことが良いです。
  • 認証方法:DNS認証
    認証用のメールアドレスやWEBページがある場合は他のものを選んでも良いです。
  1. 「公開鍵の作成」でコピーした公開鍵ファイルの内容を「CSR貼付」欄に入力して、「CSR内容確認」を選択します。
  1. 公開鍵作成の際に入力した内容が表示されるため、問題がなければ「次へ」を選択します。
  1. 申請担当者情報を入力して「次へ」を選択します。
  1. これまでの設定内容の確認を求められるので、問題がなければ「次へ」を選択します。
  1. 支払料金の確認を求められるので、問題がなければ「決定」を選択します。

DNS認証設定

先ほど発行したSSLが自分のものだと証明するために、自分のドメインに認証IDを設定します。

  1. 「設定先FQDN」からドメインを選択して、表示される「認証ID」をコピーします。
    デュアルアクセス「有効」を選択した場合は、「wwwあり」と「wwwなし」の2つがあります。
  1. 左のリストの中から「DNS」を選択して、「ドメインリスト」画面を開きます。
  1. ドメインリストから対象のドメインの「>」を選択して、設定を展開します。
    展開後、右側の鉛筆マークをクリックして、設定を編集できるようにします。
  1. 画面の下までスクロースして「+」をクリックして入力エリアを増やします。
    ①でコピーした認証IDを次の通りに入力して、保存を選択します。
  • wwwあり
    タイプ:TXT
    名称:www
    TTL:3600
    値:①でコピーした値
  • wwwなし
    タイプ:@
    名称:www
    TTL:3600
    値:①でコピーした値
  1. 左のリストの中から「セキュリティ」 -> 「SSL」を選択して、「SSLサーバー証明書リスト」画面を開く。
    リストの中から申請中のSSLの「>」を展開して、認証方法の「詳しくはこちら」を選択します。
  1. 「設定先FQDN」からドメインを選択して、「認証依頼」を選択します。
  1. 完了が表示されたらDNS認証は完了です。

証明書のダウンロード

  1. DNS認証が完了したら、改めて左のリストから「セキュリティ」 -> 「SSL」を選択して「SSLサーバー証明書リスト」画面を開く。
  2. 画面が開いたら、申請が終わったSSLを展開する。
    展開すると「証明書」ボタンが現れるため選択します。
  1. ダイアログが表示されたら、証明書種類の中から「中間証明書(ICA)」を選択して「はい」をクリックして証明書をダウンロードします。
    「証明書(PEM)」も同じ方法でダウンロードします。

SSL証明書の配置

最後にダウンロードしたSSL証明書をサーバーに配置して、Apacheから証明書を見れるように設定していきます。

サーバー証明書の配置

  1. サーバーに戻り、作業用ディレクトリで下記のコマンドを実行してサーバー証明書を作成します。
vi server.crt

  1. ダウンロードしたファイルを「証明書(PEM)」「中間証明書(ICA)」の順で貼り付けてファイルを保存します。
server.crt
-----BEGIN CERTIFICATE-----
「証明書(PEM)」の内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
「中間証明書(ICA)」の内容
-----END CERTIFICATE-----

Apacheの設定

  1. ApacheのSSL設定ファイルがあるディレクトリに移動します。
cd /etc/apache2/sites-available

  1. SSL設定ファイルを開きます。
vi ssl.conf

  1. VirtualHost *:443ディレクティブに下記の設定を追加します。
<VirtualHost *:443>
  ... 他の設定 ...
  SSLCertificateFile /etc/httpd/conf/server.crt
  SSLCertificateKeyFile /etc/httpd/conf/server.key
  ... 他の設定 ...
</VirtualHost>

動作確認

  1. Apacheを再起動します。
systemctl restart apache2

  1. 再起動すると下記のように秘密鍵のパスワードを求められるので、秘密鍵の作成で設定したパスワードを入力します。
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.

  1. 対象のWEBページにアクセスして警告が出なければ成功です!

補足:SSLパスワードの解除方法

SSLの設定を行うと、Apacheを再起動するたびに秘密鍵のパスワードを要求されます。
毎回の入力が面倒な場合は、次の方法でパスワードなしの秘密鍵を作成できます。

  1. 秘密鍵を上書きして新しいパスワードなしの秘密鍵を作成するため、オリジナルの秘密鍵をバックアップしておきます。
cp server.key server.key.org

  1. 次のコマンドで秘密鍵のパスワードを解除します。
openssl rsa -in server.key -out server.key

  1. 次のようにパスワードを求められるので、秘密鍵の作成で設定したパスワードを入力します。
Enter pass phrase for server.key:
writing RSA key

これにより再起動の際にパスワードの入力を求められなくなります。

ただし、パスフレーズを解除したことでセキュリティリスクが上がるため、秘密鍵の扱いには注意してください。

まとめ

今回はアルファSSLの設定方法を解説しました。

頻繁に行う作業ではないため、いざその時が来るとやり方を忘れてしまいます。

そんな時のための参考になれば幸いでです。

ABOUT ME
かずき
組み込み系システム開発10年目のエンジニア。副業としてWEB系システムによる業務効率化をサポートしています。ブログではシステム開発に関する備忘録や神戸魅力を発信します。