自宅WebサーバのHTTPS化

はじめに

自宅WebサーバをそろそろHTTPS化しておこう。

HTTPS化に必要なのはサーバ証明書というのは知ってる。 サーバ証明書には、ちゃんとした認証局が発行した正式なサーバ証明書と、自前で発行したオレオレ証明書がある。

正式なサーバ証明書は有料だと思っていたが、最近は「Let's Encrypt」という無料のサーバ証明書を発行してくれるサービスもある。

これはもうHTTPS化をやらない理由はないだろうということでやってみた。 自分用のメモも兼ねて、手順を記録しておこう。

まずはオレオレ証明書でテスト

最終的には秘密鍵とサーバ証明書が必要になるようだ。

流れとしては、こんな感じ。

  • 秘密鍵/公開鍵を生成
  • サーバ証明書の発行申請ファイル(CSR)の生成
  • CSRからサーバ証明書を生成

これらのファイルを生成するのにOpenSSLのコマンドを使う。

  1. 秘密鍵/秘密鍵の生成

RSA方式の2048bit長の秘密鍵/秘密鍵を生成。server.keyには秘密鍵と公開鍵のペアが含まれている。

  # openssl genrsa 2048 > server.key
  
  1. サーバ証明書の発行申請ファイル(CSR)の生成

サーバ証明書を正規の認証局に発行してもらうなら、CSRという形式の申請書ファイルを生成し、それを認証局に送ってサーバ証明書を生成してもらう。 自前でサーバ証明書を発行する場合も、CSRを生成するようだ。

ここでドメインや組織名などを記入する。後で生成されたサーバ証明書の内容を確認するので、全部律儀に入力しておこう。 通信を暗号化するだけなら、全項目Enterだけでもいいと思う。

server.keyは先ほど生成した秘密鍵と公開鍵が含まれたファイル。 CSRに組み込まれるのは公開鍵だけ。

  # openssl req -new -key server.key > server.csr
  

server.csrの中身を解析表示させたいなら、以下のコマンドで。

  # openssl req -noout -text -in server.csr 
  
  1. CSRからサーバ証明書を生成

CSRからサーバ証明書を生成するのは以下のコマンド。

  # openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
  
  1. 生成したサーバ証明書をhttp.conf に組み込む

ウチのApacheはVirtualHostを使ってるのだが、HTTPS用のVirtualHostを追加して、そこに先ほど作った秘密鍵とサーバ証明書を指定してやればいい。 こんな感じで。

  <VirtualHost *:443>
    SSLEngine on
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1
    SSLCertificateKeyFile /etc/httpd/conf/ssl/server.key
    SSLCertificateFile /etc/httpd/conf/ssl/server.crt
    ServerName tech-notes.org
    <Directory "/home/documents/web/html">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>
  </VirtualHost>
  

httpdを再起動して設定を有効化した後でHTTPSでアクセスすると、警告がでるけどちゃんとHTTPSでつながるようになる。 証明書の詳細を確認すると、先ほど発行申請ファイル(CSR)を生成したときに設定したもろもろの情報が表示されるのを確認できる。

Let's Encryptでサーバ証明書を生成

さて、いよいよ警告のでないちゃんとしたサーバ証明書をLet's Encryptで生成してみよう。 流れとしてはこんな感じだ。

  • Let's EncryptのClientをインストール
  • Clientのコマンド使って証明書を生成し、ダウンロードして保存
  • 先ほど作ったオレオレ証明書と入れ替え

このへん、手順を記録してなかったので詳細わからなくなってしまった。 証明書の有効期限は6ヶ月なので、更新するときにまた調べてみよう。

なお、CentOS7系だとyumでLet's Encryptのクライアントインストールができるので簡単。 CentOS6系で試したんだけど、なんか手間だった。


戻る