clock-up-blog

go-mi-tech

RapidSSL ワイルドカード証明書を Apache と Azure Web App に設定(雑メモ)

情弱なもので Let's Encrypt とかいう新しくて安いものが使えず、RapidSSL ワイルドカード証明書を2万円(有効期間は1年間)で買って、諸々設定した。

これ完全に自分のためだけの備忘録で、人に読ませるつもりで書いてません。ごめんなさい。あと情報はところどころボカしてる。さすがにノーガードはどうかと思うので。

設定対象

SSL 証明書を買ったショップ

www.ssl-store.jp

安いのか高いのか分からないけど、過去に使ったことあるので。
はてブのコメントでも、そこそこ「安い」と言われていた。2017年くらいまでは。今の感覚ではどうだか分からない。

RapidSSL は過去に使ったことあるのでそれにした。1年間で2万円……。
PositiveSSL だと1年間で1.1万円……。来年はこれを使ってみようかな。

Let's Encrypt もいつかどこかで使ってみる。お金節約しないと……。

対象ドメイン

「*.clock-up.jp」の期限が近付いてきていたので、これを更新する。

参考サイト

qiita.com

自分が昔 Qiita に書いた記事でした……(あるある)。こっちのほうが丁寧に書いてる。でも Azure Web App のことまでは触れてない。

作業場所

CentOS にて。

$ uname -a
Linux myserver 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

$ httpd -v
Server version: Apache/2.4.39 (IUS)
Server built:   Apr  2 2019 14:11:06


もうなんというか動けばいいやくらいの感覚なのでディレクトリも適当なところに作る。

$ sudo su -
# cd /etc/httpd
# mkdir ssl-20190902
# cd ssl-20190902

秘密鍵CSR の作成

# openssl req -new -newkey rsa:2048 -nodes -out clock.csr -keyout clock.key -subj "/C=JP/ST=Tokyo/L=Chiyoda-ku/O=ClockUpJp/OU=Web/CN=*.clock-up.jp"
Generating a 2048 bit RSA private key
..+++
.....+++
writing new private key to 'clock.key'
-----

# ls -ltr
total 12
-rw-r--r-- 1 root root 1704 Sep  2 23:11 clock.key
-rw-r--r-- 1 root root 1009 Sep  2 23:11 clock.csr

秘密鍵の確認

本当は cat なんてしたらダメです。参考までに。

# cat clock.key
-----BEGIN PRIVATE KEY-----
MII....
..........
-----END PRIVATE KEY-----

CSR の確認

こっちは公開情報みたいなものなので、まぁ。

# cat clock.csr
-----BEGIN CERTIFICATE REQUEST-----
MII....
..........
-----END CERTIFICATE REQUEST-----

# openssl req -text -noout -in clock.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Tokyo, L=Chiyoda-ku, O=ClockUpJp, OU=Web, CN=*.clock-up.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            ..........

CSR を登録

ショップで買った RapidSSL のアクティベート画面でコモンネームと CSR の中身をまるまる登録。

証明書は admin@clock-up.jp で受け取ることにする。(これはあらかじめ G Suite でメールアドレスを作っておいた)

割とすぐにアクティベート用のメールが届く

メール本文内のアクティベートリンクを開いて、「Approve」すれば OK。

アクティベートから数分後に証明書がメールで届く

届いたメール下部には以下のような文字列がある。これが証明書。
これを /etc/httpd/ssl-20190902/server.crt として保存。

# cat server.crt
-----BEGIN CERTIFICATE-----
MII....
..........
-----END CERTIFICATE-----

# openssl x509 -text -noout -in server.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            04:dc:7e:5e:d0:f5:81:fa:38:b3:e7:67:b7:3b:b4:8c
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL RSA CA 2018
        Validity
            Not Before: Sep  2 00:00:00 2019 GMT
            Not After : Oct  1 12:00:00 2020 GMT
        Subject: CN=*.clock-up.jp
        ....
        ....

中間CA証明書を取得

https://www.geotrust.co.jp/resources/rapidssl/repository/intermediate_sha2.html
このあたりから RapidSSL の中間CA証明書をコピーしてきて /etc/httpd/ssl-20190902/inca.crt として保存。

# cat inca.crt
-----BEGIN CERTIFICATE-----
MII....
..........
-----END CERTIFICATE-----

# openssl x509 -text -noout -in inca.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            08:a5:a2:46:cd:4b:5c:8c:83:d7:02:b4:bb:ab:53:49
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
        Validity
            Not Before: Nov  6 12:23:33 2017 GMT
            Not After : Nov  6 12:23:33 2027 GMT
        Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL RSA CA 2018
        ....
        ....

ここまでの一揃いのファイルを確認

# ls -ltr
total 24
-rw-r--r-- 1 root root 1704 Sep  2 23:11 clock.key
-rw-r--r-- 1 root root 1009 Sep  2 23:11 clock.csr
-rw-r--r-- 1 root root 2037 Sep  2 23:31 server.crt
-rw-r--r-- 1 root root 1688 Sep  2 23:34 inca.crt

ここまでファイルが揃えば Apache の設定はできる。

でも今回は Azure の Web App でも使いたいので .pfx という拡張子のファイルも作る。

さらに pfx を作る

# cat clock.key server.crt > clock.pem
# openssl pkcs12 -export -in clock.pem -out clock.pfx
Enter Export Password: (何かしらパスワードを入力)
Verifying - Enter Export Password: (同じパスワードを入力)

pfx はパスワード設定無しでも作れるけど、それだと Azure の Web App に登録できないのでダメ。何かしら設定する。

現時点でのファイルを確認

ここまでの手順でファイルが6個できた。root ユーザが読めれば良いだけなのでパーミッション変えちゃう。

# chmod -R . 700
# ls -ltr
total 24
-rwx------ 1 root root 1704 Sep  2 23:11 clock.key
-rwx------ 1 root root 1009 Sep  2 23:11 clock.csr
-rwx------ 1 root root 2037 Sep  2 23:31 server.crt
-rwx------ 1 root root 1688 Sep  2 23:34 inca.crt
-rwx------ 1 root root 3741 Sep  2 23:43 clock.pem
-rwx------ 1 root root 3061 Sep  2 23:50 clock.pfx

これで Apache にも Azure の Web App にも使えるファイルが全て揃った。

Apache 設定

雰囲気的にはこんな感じの設定。Apache 2.4.8 以降では SSLCertificateChainFile 廃止されるってどこかに書いてあったけど、この設定で動いているのでそのまま動かすことにする。

/etc/httpd/conf.d/ssl.conf

....
....
<VirtualHost *:443>
    DocumentRoot "/var/www/hoge.clock-up.jp/public_html"
    ServerName hoge.clock-up.jp:443

    SSLEngine on
    SSLCertificateKeyFile   /etc/httpd/ssl-20190902/clock.key
    SSLCertificateChainFile /etc/httpd/ssl-20190902/inca.crt
    SSLCertificateFile      /etc/httpd/ssl-20190902/server.crt

    <Directory "/var/www/hoge.clock-up.jp/public_html">
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>

Azure Web App の設定

Azure App Services - Web App の目的のインスタンスTLS/SSL settings という画面で pfx ファイルをアップロードできる。このときパスワードは必須。なのでパスワードの無い pfx は使えない。

あとは認識された証明書を Binding タブでサブドメインと紐づければ OK。

おしまい

証明書周りは丁寧に書こうとすると時間が無限に吹き飛ぶのでかなり雑なメモに留めてます。

気が向いたら詳細に踏み込んだ記事を書くかもしれないけど期待はしないでください。
僕のブログに来る人って、だいたい Google 検索結果から飛んでくる。(だから期待どうこうとか関係ない)