SSL通信作成・更新・適用~Apache+OpenSSL~

こんにちは あいおんです。

長らく更新していませんでしたが、

今回は、WebのSSL証明書作成、更新及び適用についてご紹介したいと思います。

 

そもそも

SSL証明書とは何かについてですが、

ざっくり言うと、「普通のHTTP通信では暗号化されいないから、

暗号化しているHTTPS通信をするときに使うもの」

程度の認識でいいと思います。

 

前提としては、以下の二つがインストールしてある前提でお話しします。

  • Apache    :Webサービス提供
  • OpenSSL    :暗号通信提供

おそらく、普通にインストールしていれば、両方インストールされていると思います。

あ、例によって、例のごとく、CentOSですので、あしからず。

多分Debian系と違うのは、Apacheの設定ファイルの設置場所ぐらいなんじゃないでしょうか(適当)

 

作成も更新も以下の手順をとります。

ただ、更新の場合は、鍵設置の時にファイルがあると思いますので、

バックアップなり何なり取っておくといいと思いますよ。

いや、いらないかもしれませんが、まぁ一応ね。

手順

手順としては以下になります。

  1. 証明書作成
  2. Apache設定ファイル変更、鍵設置
  3. 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通信には二つの意味がありまして、

  • 自分であることの証明
  • 通信経路の暗号化

以上の二つなんですが、

今回は、下の通信経路の暗号化をしたいだけなので、

この手順だけでも大丈夫です。

ただ、サイトアクセスの時に証明書エラーが出ますので、無視してください。

このエラーは、「この証明書は、誰にも証明してもらってないよ」

という趣旨なので、当然です。

これを高いお金を払って、企業は誰かに証明してもらっているんですね。

 

お疲れさまでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です