2003年12月15日

自署証明書の作成と,Webサーバへの適用方法

ブラウザにインストール可能な自サイト用の証明書を作る方法をまとめます.
Snake Oil社の証明書は卒業しましょう.
opensslで作成し,apacheで利用します.

1.秘密鍵の作成

3DESを使ってパスワードありの秘密鍵を作成するには(通常,推奨),

% openssl genrsa -des3 -out filename.key 1024

パスワードなしの秘密鍵を作成するには,

% openssl genrsa -out filename.key 1024

2. 自署証明書の作成

自署証明書を作成するには,有効期間をdaysの引数に指定して,[2]

% openssl req -new -key filename.key -x509 -days 365 -out filename.crt

質問に答えていきます.以下は一例です.
Common Name は,アクセスに使われるURLのホスト名でなければなりません.
ここに,ワイルドカード (*) を使うことができます.

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Mitaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Toshikazu Ichikawa
Organizational Unit Name (eg, section) []:Toshikazu Ichikawa
Common Name (eg, YOUR name) []:*.toshikazu.org
Email Address []:username@domainname

3. ウェブサーバへの証明書のインストール

filename.key: 秘密鍵
filename.crt: 証明書
を適切にインストールします.

Apache では httpd.conf に次のように設定する

SSLEngine on
SSLCertificateFile /path/to/conf/ssl.crt/filename.crt
SSLCertificateKeyFile /path/to/conf/ssl.key/filename.key

そして,再起動をします.

# apachectl stop
# apachectl startssl

4. 証明書配布の一方法

filename.crt: 証明書はクライアントのブラウザに
「信頼できる証明書」としてインストールされる必要があります.
例えば次のような方法があります.

・初回アクセス時に出る「警告ダイアログ」から
証明書の内容を表示して,証明書のインストールを行う.

・証明書を配布するURLからダウンロードしてインストールする.
次のようなCGIを準備することで効率的に行えます.[3]
=== cert.cgi ===
#!/bin/sh
echo "Content-Type: application/x-x509-ca-cert"
echo
cat filename.crt
================

その他

・証明書の内容を表示した場合 [4]
openssl x509 -noout -text -in filename.crt

・CA.sh という openssl に付属のスクリプトを使うと
より本格的な認証局の運用が簡単にできる.

参考:
[1] 安全な RedHat Apache サーバの構築方法: 証明書による作業
http://www.linux.or.jp/JF/JFdocs/SSL-RedHat-HOWTO-3.html
[2] UNIX man pages : req (1)
http://mirrors.ccs.neu.edu/cgi-bin/unixhelp/man-cgi?req+1
[3] テスト用CA関連
http://www.komaki.net/~komaki/ca/
[4] OpenSSLについて
http://ash.or.jp/sec/openssl.htm