K4750.NET

(正しい)オレオレ証明書の作り方

UbuntuのApache2にて(簡易に)SSL通信する際は、make-ssl-certコマンドを使い「自己署名証明書(self-signed certificate)」(いわゆる、オレオレ証明書)をサーバー証明書として作るのが手っ取り早い上に確実(※1)である。以下にmake-ssl-certコマンドの使い方および、このコマンド(shell-script)が実行している内容について書く。

※1 確実=オレオレ証明書を正確に作れるという意味。


1.make-ssl-cert

標準の/etc/apache2/site-available/default-sslを有効にして使用している場合は特に何もする必要はない。既にインストール時に生成されたオレオレ証明書を使用する設定になっている。なお、ホスト名の変更等を行った場合は、以下を実行することで、オレオレ証明所を再生成することができる(rootで実行する必要)。

# make-ssl-cert generate-default-snakeoil --force-overwrite

2.何をやっているか

make-ssl-certコマンドは単なるShellスクリプトであり、上記をパラメータとして実行した場合、以下の(ような)内容が実行される。

# TMPFILE="$(mktemp)"
# HostName="$(hostname -f)"
# sed -e "s#@HostName@#$HostName#" /usr/share/ssl-cert/ssleay.cnf > $TMPFILE
# openssl req -config $TMPFILE -new -x509 -days 3650 -nodes 
  -out /etc/ssl/certs/ssl-cert-snakeoil.pem 
  -keyout /etc/ssl/private/ssl-cert-snakeoil.key
# chmod 644 /etc/ssl/certs/ssl-cert-snakeoil.pem
# chmod 640 /etc/ssl/private/ssl-cert-snakeoil.key
# chown root:ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key
# cd /etc/ssl/certs/
# ln -sf ssl-cert-snakeoil.pem $(openssl x509 -hash -noout -in ssl-cert-snakeoil.pem)

これにより(中間ファイルはさておき)二つのファイルssl-cert-snakeoil.pemファイル(オレオレ証明書)、ssl-cert-snakeoil.keyファイル(秘密鍵)が生成され、最後にパーミッションの設定等が自動的に行われる。

コマンドの実行状況を見て思うのは、証明書を作る際は、ファイルを生成する以外にも思いのほかやることがあるということ。パーミッションの設定については語られているサイトはあるが、最後のシンボリックリンクを生成する部分(ln -sf …)については、実行状況を見て初めて知った。

自前で“正しく”オレオレ証明書を作りたいのであれば、make-ssl-certコマンドを使うのが手っ取り早い上に、システムにとっても整合的である。


3.ファイルの内容

オレオレ証明書や秘密鍵の内容は、それぞれ以下のコマンドを実行して確認することができる。

# openssl x509 -text < /etc/ssl/certs/ssl-cert-snakeoil.pem
# openssl rsa -text < /etc/ssl/private/ssl-cert-snakeoil.key

内容からは、証明書の有効期間が発行後10年であること、公開鍵暗号方式がRSA(2048bit)であること、発行者(Issuer)および主体者(Subject)が同じ=オレオレ証明書であること等が読み取れる。