この1月の12日に Webサーバの SSL 証明書の期限が切れることをすっかり忘れてて、慌てて更新したのだけれど、記憶の新しいうちに書き記しておきたいと思います。
さくらVPS 側での作業
まず、SSLサーバ証明を必要としているサーバにログインして秘密鍵を生成し、その秘密キーを使用して Certificate Signing Request (CSR: 証明書署名要求) を生成します。
この、
- 秘密鍵
- CSR
は、両方ともサーバ証明を必要とするサーバー自身で生成します。
秘密鍵の生成
VPS に SSH でリモートログインして、秘密鍵を作成します。
$ openssl genrsa -aes256 2048 > server.key
途中、秘密鍵に対するパスワードを求められますので、確認を含んで2回入力します。
CSR (証明書署名要求) の生成
次に、CSR を生成します。
$ openssl req -new -key server.key -out server.csr -sha256
ここで指定している server.key
は、先ほど生成した秘密鍵を指定します。
コマンドを実行すると、CSR に含める情報について何点か入力する必要があります。
Enter pass phrase for server.key
: 秘密鍵のパスワードを入力Country Name (2 letter code) [AU]
: 日本なので JP と入力State or Province Name (full name)
: Osaka 等Locality Name (eg, city)
: Osaka-City 等の市区町村Organization Name (eg, company)
: 組織名 (なくても良さげ)Organizational Unit Name (eg, section)
: 未入力でOKCommon Name (e.g. server FQDN or YOUR name)
:www.rough-and-cheap.jp
今回取得するWebサーバーのFQDNEmail Address
: 未入力でOKA challenge password
: 未入力でOKAn optional company name
: 未入力でOK
以上で、server.csr
ファイルが生成されます。
さくら VPS で SSLサーバ証明書 の新規登録
これまでは、Rapid SSL を使ってたんですが、さくらインターネットさんいわく、 JPRSドメイン認証型 を勧められたので、そちらで新たに登録することにします。
以下の作業は、 さくらインターネット さんの さくらのVPS 、 Ubuntu 18.04 上で Apache 2.4 を使用して行っています。
さくらインターネット: SSLサーバ証明書申込み
JPRSドメイン認証型SSL の仕様と金額は以下のとおり。安いですね。
個人ブログなんで、 Let's Encript を使えばいいと思うんですが、今回はこちらでいこうと思います。
一番下の、「今すぐ申し込む」 ボタンから申し込みします。
途中、さくらインターネットにログインして、サービスの選択画面に移ります。
「お申し込み種別」を、新規登録、「お申し込みプラン」を、JPRSドメイン認証型・2年 にして、支払いの設定、規約の同意と進み、「CSRの入力へ進む」 をクリック。
CSR を貼り付けて送信
server.csr
ファイルの内容を cat
コマンドで中身を表示させて、それを SSL 申込画面の CSR 入力のテキストエリアにコピペします。
$ cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE REQUEST-----
内容を確認して送信します。
認証ファイルのダウンロード
CSR 送信後、おおよそ10数分程度 (多少前後するかもしれません) で、さくらインターネットから
「SSLサーバ証明書 認証ファイルアップロードのお願い」
というメールが来ますので、さくらインターネットにログインして、契約情報からSSL JPRS ドメイン認証 のページを開き、「認証ファイルDL」をクリックして認証ファイルをダウンロードします。
そしてそのファイルを、メールの指示にしたがってドキュメントルート配下のディレクトリ、/.well-known/pki-validation/
に保存します。
例えば、ドキュメントルートが、/var/www/html
の場合は、認証ファイルを /var/www/html/.well-known/pki-validation/
に保存します。
認証ファイルが見えるか確認
保存したあとは、SSL認証局が認証ファイルを確認して、SSL証明証が発行されるのを待つだけですが、ここで認証ファイルを見ることができるかどうか確認しておく必要があります。
特に、mod_rewrite
を使用して、リクエスト URL を書き換えているような場合、認証ファイルにリクエストが通らないことも考えられます。
確認方法は、単純にブラウザのシークレットモードなどで直接 URL を叩いて見る方法です。シークレットモードを使用するのは、ブラウザキャッシュの影響を受けたくないからです。
http://申請したFQDN/.well-known/pki-validation/***.txt
でブラウザに文字列が表示されればOKです。
認証ファイルが見れない場合
さくらインターネットによると、以下のような例があるということです。
認証ファイルへのアクセスが拒否
.htaccess
ファイルや、httpd.conf
(Ubuntu であれば、/etc/apache2/site-enabled/000-default
) などでファイルへのアクセス拒否の設定がされている場合。
<FilesMatch "\.(ini\.php|lng\.php|txt|gz|tgz)$">
Order allow, deny
Deny from all
</FilesMatch>
この場合は、FilesMatch
の txt
を消すことでアクセスが可能になります。
mod_rewrite によるリダイレクト
また同様に、mod_rewrite
でリクエストURLがリダイレクトされる場合も認証を確認することができない、とされるのでアクセスできるように設定を変更する必要があります。
例として、
:
RewriteEngine On
RewriteCond (.*) http://追加ドメイン/サブディレクトリ/$1 [R=301,L]
仮に認証ファイル名が、12345.txt
とした場合、
:
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/.well-known/pki-validation/12345.txt
RewriteCond (.*) http://追加ドメイン/サブディレクトリ/$1 [R=301,L]
のようにして、%{REQUEST_URI}
が /.well-known/pki-validation/12345.txt
の場合はリダイレクトさせないように設定します。
また、申請した FQDN が www.example.com
のように www
付きで申請した場合は、
http://example.com/.well-known/pki-validation/12345.txt
か
https://example.com/.well-known/pki-validation/12345.txt
でアクセスするようで、www
無しの URL にアクセスした時、www
付きに URL を書きかえてリダイレクトするように設定している場合も注意が必要です。
:
RewriteEngin On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
または、
:
RewriteEngin On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
のような設定の場合です。
この場合は、Rewrite の設定を一時的に無効化しておく必要があります。
認証ファイル確認後
SSLサーバ証明書のダウンロード
認証ファイルが確認されると、さくらインターネットから
「JPRS SSLサーバ証明書発行のお知らせ」
というメールが来ますので、その指示に従って証明書をダウンロードします。
中間CA証明書 のダウンロード
次に、SSLサーバー証明書 を発行した JPRS のサーバー証明書をダウンロード します。
SSL 関連ファイルをサーバーに配置
ここで、次の各ファイルが既に手元に揃っているはずです。
- 秘密鍵ファイル (
server.key
) - SSLサーバ証明書 (
server.crt
) - 中間CA証明書 (
JPRS_DVCA_G3_PEM.cer
)
これらのファイルを、サーバ上に配置します。
例えば、ファイルの配置を以下のようにした場合、
ファイル種別 | 配置先 |
---|---|
秘密鍵ファイル | /etc/ssl/CA/private/server.key |
SSLサーバ証明書 | /etc/ssl/CA/certs/server.crt |
中間CA証明書 | /etc/ssl/CA/certs/JPRS_DVCA_G3_PEM.cer |
その情報を、httpd.conf
(Ubuntu であれば、default-ssl.conf
) 以下のように指定しておきます。
SSLCertificateKeyFile /etc/ssl/CA/private/server.key
SSLCertificateFile /etc/ssl/CA/certs/server.crt
SSLCACertificateFile /etc/ssl/CA/certs/JPRS_DVCA_G3_PEM.cer
設定ファイルに各証明書、および鍵ファイルを指定し保存したら、Apache2 を再起動します。再起動の際に、パスフレーズを求められると思うので、秘密鍵作成時のパスフレーズを入力します。
問題なく、Apache2 が起動したら、ブラウザから確認します。
Firefox や Chrome からであれば、URL のアドレス表示部にある、鍵マーク() をクリックすることで証明書の発行者や詳細を確認することができます。
まとめ
Web サーバの SSL証明書の登録や更新というと、いつもやり方や手順がよくわからなくなるので、ちょっとまとめておきました。と言ってもあくまでも自分用ですが・・
ただ、VPS であれ レンタルサーバーであれ、必要なファイルや手順はほぼ同じだと思います。
VPS は、サーバの全権限を持っていますし、SSH で接続して端末上から作業するのが前提なので、UNIX シェル に慣れてさえいれば VPS のほうが設定やトラブルシュートは楽かもしれませんね。
いずれにしても、今回は途中2時間ほど、SSL の有効期限切れの状態ができてしまっていたので、次回は更新期限忘れずに証明書を更新したいなと思います。
0件のコメント