どうもです。最近のnoteを始めてみたHashi(@rinoo8433)です。
さて、そんなことはどうでもいいんですけど、今回はクライアント案件でAWSで運用しているWebサービスにさくらインターネットで取得したドメイン認証型SSLを設定してくれという要望があったので、備忘録も兼ねてその手順を紹介したいと思います。というか、そもそもAWSを使っていればSSLも無料で設定できるので今回のようなケースはあまりないかと思いますけど、ELBをいれていないようなニッチなサービスをSSL化したいというようなケースですね。
環境
なお、今回の環境は下記の通りとなります。
今回の環境
- AWS EC2(Amazon Linux AMI)
- Apache 2.4.33 (Amazon)
- さくらのドメイン認証型証明書(JPRS)
mod_sslのインストール
それでは早速諸々設定していきましょう。
まずは、mod_sslをイントールしていくので、下記コマンドでインストールできるパッケージの確認をします。
sudo yum list available | grep ssl
今回は下記のパッケージをインストールします。
sudo yum install mod24_ssl.x86_64
インストールができたら一応下記コマンドで確認しておきます。
ls -l /etc/httpd/modules/ | grep ssl
CSRファイルの生成
続いて、さくらインターネットで申請する際にCSRファイルが必要になってくるので、事前にCSRファイルを生成します。
OpenSSLのバージョン確認
まずは、お使いのサーバー(今回はAWS、EC2)環境にログインして、OpenSSLのバージョンは確認します。
$ openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
上記のようにバージョンが表示されれば問題ありません。
秘密鍵の生成
続いて、下記コマンドでApacheのconfディレクトリに移動します。
$ cd /etc/httpd/conf
上記パスへ移動したら下記コマンドで秘密鍵を保管するディレクトリを作ります。
$ sudo mkdir ssl.key
ディレクトリを作成したら下記コマンドで秘密鍵を生成します。
なお、秘密鍵の名称には識別できるように任意の名前を入力してください。一般的には大体ドメイン名にその年を付与する形が多いと思います。(例:example.com2019)。
今回は便宜上、「example.com2019」という名称で進めたいと思います。
$ sudo openssl genrsa -des3 -out ./ssl.key/example.com2019.key 2048
上記コマンドを叩くとパスフレーズを求められますのでパスフレーズを入力します。確認も含めて2回入力が必要になります。
秘密鍵を生成したら下記コマンドで鍵ができているか確認しておきましょう。
$ ls ssl.key
example.com2019.key
上記のように生成した鍵の名前が表示されればOKです。
CSRファイルの生成
秘密鍵を生成したらCSRファイルも生成していきます。
まず、秘密鍵の時と同様CSRファイルを保管するディレクトリを下記コードで作成します。
$ sudo mkdir ssl.csr
続いて、下記のコードでCSRファイルを生成します。
$ sudo openssl req -new -key ./ssl.key/example.com2019.key -out ./ssl.csr/example.com2019.csr
このように秘密鍵の情報を元にCSRファイルを生成します。
なお、CSRファイル生成時に下記のことをいろいろと聞かれるので事前に用意しておいてください。下表は例になるので実際はそれぞれの環境に合わせて設定してください。なお、「Email Address」等、入力不要な項目に関してはEnterで飛ばして大丈夫です。
また、CSRファイル生成時にパスフレーズを求められると思うので、秘密鍵生成時に設定したパスフレーズを入力してください。
フィールド | 例 |
---|---|
Country Name | JP |
State or Province Name | Tokyo |
Locality Name | Shibuya-ku |
Organization Name | Example Inc |
Organization Unit Name | Technical Division |
Common Name | example.com |
Email Address | 入力不要 |
A challenge password | 入力不要 |
An optional company name | 入力不要 |
CSRファイルの内容を確認
必要事項を入力したらCSRファイルが完成していると思うので、下記コマンドで中身の確認をしてください。
$ vi ssl.csr/example.com2019.csr
英数字が羅列されていると思います。この内容はSSL証明書申請時に必要になってくるので、テキストファイルなどにコピーしておくといいでしょう。
さくらインターネットでドメイン認証型SSLを申請
CSRファイルも生成したので、続いてさくらインターネット
で申請をしていきます。
今回はドメイン認証型の証明書を使用するのでこちらのページからドメイン認証型を選択します。
プランの選択
まずはプランの選択をします。今回はとりあえず1年の契約で申し込みたいので下図の通り「JPRS ドメイン認証型」の1年を選択します。
お支払い方法の設定
プランの選択をしたら、続いて支払い方法について設定します。今回はクレジットカードで決済したいと思います。
支払い方法を設定したら、約款に同意してCSRの入力に進みます。
CSRの入力
CSRの入力画面が表示されると思うので、先ほど生成したCSRファイルの内容を貼り付けます。
あとは、そのまま内容の確認をして申請は完了です。
認証ファイルをサーバーにアップロード
申請が完了したらさくらインターネットから申請完了メールが届きます。
認証ファイルのアップロード
申請が完了したら認証局よりドメインの使用権の確認があるので、認証ファイルを指定のディレクトリにアップします。
認証ファイルはさくらの契約情報ページから「契約サービスの確認」ボタンを押して表示される「契約サービス一覧」ページの「サーバ証明書」ボタンをクリックすることでダウンロードできます。なお、認証ファイル名は、[ランダムな文字列].txt形式になっています。
指定のディレクトリにアップロード
認証ファイルをダウンロードしたら、今回SSL化したいWebサイトの公開ディレクトリに「/.well-known/pki-validation/」というディレクトリを作成してそこにファイルをアップロードします。
公開ディレクトリは各環境によって違うと思いますが、「public」と仮定すると「public」配下に「.well-known」というディレクトリを、そしてその中に「pki-validation」というディレクトリを作成して、その中にファイルを格納するということになります。公開URLとしては、「https://example.com/.well-known/pki-validation/認証ファイル名」のような形になります。
これで認証ファイルのアップロードは完了になります。
認証局は自動でクローリングをしているので、そのまま認証されるのを待ってください。
なお、Basic認証などをかけているとクローリングできないのでアップロード後、認証されるまでは一時的に外してください。
また、認証ファイルは10日以内にダウンロードしてアップロードしてください。
SSL化設定
認証局にてファイルが認証されたら、サーバ証明書発行完了のメールがさくらインターネットから届きます。
SSLサーバ証明書
メールの内容を確認したら、再度さくらインターネットにログインして認証ファイルをダウンロードした際と同じ手順でSSLサーバ証明書をダウンロードします。
「server.crt」というファイルがダウンロードされると思います。
中間CA証明書ダウンロード
続いて、中間CA証明書も必要になってくるのでダウンロードします。
さくらのレンタルサーバーを利用している場合はさくらのサイトでダウンロードできるようですが、今回のように他サーバーの場合はJPRSの公式サイト内のこちらのページからダウンロードできます。
今回はドメイン認証型の中間CA証明書をダウンロードするので下図の通り「PEM形式」というリンクをクリックしてファイルをダウンロードします。
「JPRS_DVCA_G2_PEM.cer」というファイルがダウンロードされると思います。
SSLサーバ証明書をサーバーに設置
SSLサーバ証明書と中間CA証明書をダウンロードしたら、今度はサーバーに再度ログインしてダウンロードした2つのファイルの内容でファイルを生成していきます。
まず、下記のコードでcsrファイルと秘密鍵を生成した場所へ移動します。
$ cd /etc/httpd/conf
上記パスへ移動したら下記コマンドでSSLサーバ証明書ファイルを保管するディレクトリを作ります。
$ sudo mkdir ssl.crt
ディレクトリを作成したら下記コードでファイルを生成します。なお、ファイル名は秘密鍵やCSRファイルと同様、ドメイン名とその年の数値を合わせたファイル名にします。今回は「example.com2019.crt」。
$ sudo vi ./ssl.crt/example.com2019.crt
エディタが開くので、先ほどダウンロードしたSSLサーバ証明書(server.crt)をテキストエディターかなんかで開いてその内容をコピーして貼り付けます。貼り付けたら保存してください。
中間CA証明書をサーバーに設置
続いて、中間CA証明書のSSLサーバ証明書と同じ手順で作成します。
まず中間CA証明書を保管するディレクトリを作成。
$ sudo mkdir ssl.cer
続いて下記コードでcerファイルを生成。ファイル名はこれまでと同様の形式にします。
$ sudo vi ./ssl.cer/example.com2019.cer
ダウンロードした中間CA証明書(JPRS_DVCA_G2_PEM.cer)の内容をコピーして貼り付け。貼り付けたら保存。
これでSSL化に必要なファイルが揃いました。「/etc/httpd/conf」配下に「ssl.cer」、「ssl.crt」、「ssl.csr」、「ssl.key」の4つのディレクトリが存在し、その中にそれぞれファイルが格納されている状態になると思います。
パスフレーズの入力を省略
続いて、Apacheを再起動する際にパスワードの入力を省略するためにシェルスクリプトファイルを生成します。
設置する場所はどこまでいいのですが、今回はこれまでファイルを作成してきた「/etc/httpd/conf」の中に作りたいと思います。
下記のコードでシェルスクリプトファイルを生成します。
$ sudo vi /etc/httpd/conf/pass_phrase.sh
エディタが開いたら下記の内容を入力します。
#!/bin/sh
echo "秘密鍵生成時に設定したパスフレーズ"
続いて作成したファイルに下記コードで所有者権限を与えます。
$ chmod 500 /etc/httpd/conf/pass_phrase.sh
ssl.confの編集
最後に、「/etc/httpd/conf.d/ssl.conf」に今回生成した各ファイルのパスを記載していきます。
下記コマンドでssl.confファイルをエディタで開きます。
$ sudo vi /etc/httpd/conf.d/ssl.conf
エディタで開いたらSSLCertificateFile(crtファイル)のパスを今回生成したcrtファイルのパスに変更します。
変更前
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
変更後
SSLCertificateFile /etc/httpd/conf/ssl.crt/example.com2019.crt
次に、SSLCertificateKeyFile(keyファイル)のパスも今回生成したkeyファイルのパスに変更します。
変更前
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
変更後
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/example.com2019.key
さらに、SSLCertificateChainFile(cerファイル)のパスも今回生成したcerファイルのパスに変更します。
変更前
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
変更後
SSLCertificateChainFile /etc/httpd/conf/ssl.cer/example.com2019.cer
そして、最後にさきほど作成したパスフレーズに自動応答シェルスクリプトファイルのパスも紐づけておきます。
変更前
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
変更後
SSLPassPhraseDialog exec:/etc/httpd/conf/pass_phrase.sh
これでssl.confの編集は完了です。
記述エラーの確認
ssl.confの記述を編集したので、Apacheの再起動をかける前に記述エラーのチェックを下記コマンドで確認しておきます。
$ service httpd configtest
エラーがなければ「Syntax OK」と表示されると思います。
Apacheの再起動
最後に今回の変更内容を適用するためにApacheの再起動をして終わりです。
$ sudo service httpd restart
問題なければSSL化されていると思います。
まとめ
ということで、今回はさくらインターネットで取得ドメイン認証型SSL証明書をAWSのEC2(linux Apache)環境に導入する手順を備忘録も兼ねて紹介させていただきました。
少しニッチなケースになるかもしれませんが、ご参考になれば。
それでは今回はここまでまた!