さくらVPSで使用するサーバ証明書をJPRSで更新してみる

証明書の有効期限が近づいてきたので

さくらInternetよりサーバ証明書の更新の案内があった。

RapidSSLで購入して以来、発行側の都合で何度か延命していたのだが、それから2年もたっているのか。

ntoh.hatenablog.com

f:id:ntoh:20200621141449p:plain

現在利用しているのはRapidSSLサーバ証明書だが、さくらインターネット的には同等の証明レベルで低額なJPRSの証明書を勧奨している様子。 というわけで、JPRSサーバ証明書を発行してみた時のメモ。

さくらInternetのページからJPRSの証明書の申し込みをすると、いきなりCSR求められるので先にCSRを作成しておく。 CSRの他にも、openSSLやDNS設定、Webサーバも必要。

  • openSSL
  • 証明書を発行するドメインDNSエントリー追加
  • Webサーバ

鍵ペアの作成

JPRSからリリースされている手順通りに実施する。opensslコマンドが必要。

$ umask
0022
$ umask 77
$ openssl genrsa -aes256 2048 > server.key
Generating RSA private key, 2048 bit long modulus
.....................................+++
..............................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

$ umask 0022

パスフレーズを入力した場合は、利用時にパスワードの入力が求められるので注意。 (Webサーバ起動時など。)

CSRの作成

JPRSの手順では以下が指定されている。

  • Country Name はJP
  • Organization NameはJapan Registry Services Co., Ltd.を指定する
  • Email Address は指定しない
  • Challenge password は指定しない

いくつか記入することで、証明書発行用のcsrファイルが作成される。

$openssl req -new -key servername.key -out server.csr -sha256

Enter pass phrase for servername.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Shinjuku-ku
Organization Name (eg, company) [Default Company Ltd]:Japan Registry Services Co., Ltd.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:moooi.jp
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

CSR内容の表示

作成したCSRを表示して---BEGINから---ENDまでをコピーする。

$cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICtzCCAZ8CAQAwcjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRQwEgYD
VQQHDAtTaGluanVrdS1rdTEqMCgGA1UECgwhSmFwYW4gUmVnaXN0cnkgU2Vydmlj
ZXMgQ28uLCBMdGQuMREwDwYDVQQDDAhtb29vaS5qcDCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAKdbKvXskriPus3Hc2s286ZVPKTrLogo8ftlOZ1ztaQ0
      (一部省略)
eiTpzQnJlg8ERo9mmdB1LIFz1bxUGNuuVqXYpw0w5/6lQUbAunvzRVbCIqH2wwDO
FtX9H2Xl4Pb+g6G+8uv3sKTqqjTjQ57LPMumr7NcPGrpfQiJz2MgY6+L/k7rfb6f
spso62DhUgECuoLPZtZa6COxitvyoyIwKORP
-----END CERTIFICATE REQUEST-----

f:id:ntoh:20200621154717p:plain

CAAレコードの修正

SSLサーバ証明書を第三者が勝手に発行することを防止する仕組みです。 認証局(CA)はSSLサーバ証明書を発行する際にDNSを確認し、 ドメイン所有者がその認証局SSLサーバ証明書の発行を許可しているかどうかをチェックします。

DNSサーバのCAAが適切でないと(例えば別の発行会社のドメインのみ許可されている等)キャンセルになるようなので、CAA自体を外しておくか以下のように設定しておく。

f:id:ntoh:20200622213139p:plain

認証ファイルのアップロード

CSRアップロード、申し込みをしてから30分後くらいで、「SSLサーバ証明書 認証ファイルのアップロードのお願い」というタイトルのメールが届く。

f:id:ntoh:20200622213447p:plain

さくらの管理画面から認証ファイルをダウンロード後、Webサーバに外部からアクセスできるように配置する。

/document root/.well-known/pki-validation/認証ファイル

JPRSのcrawlerが認証ファイルを正しく取得できているか、webサーバのアクセスログなどで確認しておく。下記のように200になっていればOK。 何らかのエラーで取得できない(404とか403とか)場合は、取得できるまで10分おきくらいにリトライしてくれるようだ。

$ grep pki-validation /var/log/nginx/access.log
203.208.23.40 - "GET /.well-known/pki-validation/xxxxxxd8d95411f3adc737cd5a.txt HTTP/1.1" 200 32 "-" "JPRS_CA (web file authentication crawler)"

証明書のダウンロード

認証ファイルを確認後、30分程度で発行が完了した旨のメールが届く。さくらの管理画面から証明書をダウンロード。

f:id:ntoh:20200622213509p:plain

中間証明書もあわせてダウンロードしておく。

Webサーバ毎に中間証明書の指定方法は異なるが、nginxの場合はサーバ証明書に中間証明書を下記のように連結させたものを、サーバ証明書として利用する。

-----BEGIN CERTIFICATE-----
MIIGyjCCBbKgAwIBAgIQST4lUCqGmZg78yDI890AYjANBgkqhkiG9w0BAQsFADBp
MQswCQYDVQQGEwJKUDEqMCgGA1UEChMhSmFwYW4gUmVnaXN0cnkgU2VydmljZXMg
(サーバの証明書)
9+rDu6sUYgJ8j8SBnlKpwGQqGTsVTXFrGNj9xLI7qp5iZ2xSQOFuRGGLsKc85ag0
/qoWqMCx69X9rub8SFDflKc2teg6980uDUgfA0toKly6nuJ0/xnj5wz7f3SB1Dmn
hiTJsx7Zagn8GjmbxJU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFADCCA+igAwIBAgIQIrmxXe/dFYgE618njIJQIDANBgkqhkiG9w0BAQsFADBd
MQswCQYDVQQGEwJKUDElMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4s
TFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4X
(中間証明書)
L967KO0wxbjVRotLETHQhwV0CAy2StZbwZJWEBRYQYfbv65S04kFRwqeiBy7tIYp
ME/nKr6Tfw6LqpmzqMeBJXgGonwLO1H1MqYKwwVLvk5BkcEN
-----END CERTIFICATE-----

上記でつくったサーバ証明書CSR作成の時に作成した鍵ペアをssl.conf等のnginxの設定で指定して完了。

まとめ

  • JPRS安くていいんじゃないっすかね
  • CAAの設定忘れるな

ファイル等のやりとりが、さくらの管理画面から実施する以外はメールやファイル認証する他と変わらない。レンタルサーバだともっと簡単に更新できそう。