こんにちは あいおんです。
長らく更新していませんでしたが、
今回は、WebのSSL証明書作成、更新及び適用についてご紹介したいと思います。
そもそも
SSL証明書とは何かについてですが、
ざっくり言うと、「普通のHTTP通信では暗号化されいないから、
暗号化しているHTTPS通信をするときに使うもの」
程度の認識でいいと思います。
前提としては、以下の二つがインストールしてある前提でお話しします。
- Apache :Webサービス提供
- OpenSSL :暗号通信提供
おそらく、普通にインストールしていれば、両方インストールされていると思います。
あ、例によって、例のごとく、CentOSですので、あしからず。
多分Debian系と違うのは、Apacheの設定ファイルの設置場所ぐらいなんじゃないでしょうか(適当)
作成も更新も以下の手順をとります。
ただ、更新の場合は、鍵設置の時にファイルがあると思いますので、
バックアップなり何なり取っておくといいと思いますよ。
いや、いらないかもしれませんが、まぁ一応ね。
手順
手順としては以下になります。
- 証明書作成
- Apache設定ファイル変更、鍵設置
- Apache再起動
証明書作成
まず、秘密鍵を作成します。
openssl genrsa -aes128 -out server.key 2048
説明としては、
- genrsa : 証明書作成
- -aes128 : AES128ビット暗号化
- -out server.key : server.keyに作成
- 2048 : 2048ビット
また、パスフレーズを聞かれるので、入力します。何でもいいです。
次に、CSRを作成します。
openssl req -new -key server.key -sha256 -out server.csr
- req : CSR作成
- -new : 新規
- -key server.key : 秘密鍵ファイル名指定
- sha256 : 署名アルゴリズムはSHA256を使用
- -out server.csr : 出力CSRファイル名指定
次に、パスフレーズを聞かれるので、さっきのパスフレーズを入力します。
次に、いろいろ聞かれますが、
- Country Name:JP
- State ~ :都道府県
- Locality ~ :市町村
- Organization Name:適当
- Organizational ~ :適当
- Common Name: サイトのFQDN (例:google.co.jpみたいな)
- Email:空白
- A Challenge:空白
- An optional:空白
みたいな感じで進めてください。
最後に公開鍵を作成します
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
- x509:x509形式
- -req : CSRファイル使用
- -days:有効期限
- -sha256 : SHA256アルゴリズム使用
- -in server.csr : CSRファイル名指定
- -signkey server.key : 秘密鍵ファイル指定
- -out server.crt : 出力公開鍵名指定
で、お決まりのパスフレーズを入力します。
Apache設定ファイル、鍵設置
SSL通信を有効化するために、以下の手順をとります。
- 設定ファイル編集
- 秘密鍵と公開鍵設置
- 鍵復号
設定ファイル編集
vi /etc/httpd/conf.d/ssl.conf
/SSLCertificate
とかで検索してみれば、SSLCertificateFileの行があると思うので、以下のようにします。
- # SSLCertificateFile /etc/pki/tls/certs/localhost.crt
- # SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
- SSLCertificateFile /etc/pki/tls/certs/localhost.crt
- SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
つまり、元あった行をコメントアウトして、設定を書きます。
これは、鍵を設置する場所を指定しています。
鍵設置
で、後は鍵を移動します。
- mv ./server.crt /etc/pki/tls/certs/
- mv ./server.key /etc/pki/tls/private/
これで設定は完了です。
鍵復号
ただ、このままだと、Apacheを再起動するごとにパスフレーズを聞かれます。
なので、今回は、秘密鍵を復号して置いておきます。
- cd /etc/pki/tls/private
- mv server.key server.key.back
- openssl rsa -in server.key.back -out server.key
一行目で、秘密鍵の置いてある場所へ移動します。
二行目で、名前を変更します。
三行目で、復号する意味ですが、パスフレーズを聞かれるので、入力をどうぞ。
これで、秘密鍵が復号されて設置されますので、大丈夫です。
この記事の作成に以下のサイトを参考にしました。
http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A
Apache再起動
Apacheを以下のどちらかで再起動します。
service httpd restart
service httpd graceful
上は強制的に再起動で、下は誰か接続しているのなら、接続が終了するのを待ちます。
最後に
上でも書きましたが、更新も同じ手順をとってください。
というか、これは、俗に言うオレオレ証明書といって、
誰にも証明してもらっていないものです。
本当なら、誰かに自分のサーバーを証明してもらう必要があるんですが。
そもそも、このSSL通信には二つの意味がありまして、
- 自分であることの証明
- 通信経路の暗号化
以上の二つなんですが、
今回は、下の通信経路の暗号化をしたいだけなので、
この手順だけでも大丈夫です。
ただ、サイトアクセスの時に証明書エラーが出ますので、無視してください。
このエラーは、「この証明書は、誰にも証明してもらってないよ」
という趣旨なので、当然です。
これを高いお金を払って、企業は誰かに証明してもらっているんですね。
お疲れさまでした。