自分用の認証局を作成する

TLS(SSL)証明書を使ったサイトを作成しようと思うと、VeriSignなどの認証局に署名してもらった証明書を使う必要があります。しかし、いろいろな事情(特に、お金の問題)で認証局の署名付き証明書を使えない場合、自分だけの認証局を作成してしまうのも手です。ただし、自分だけの認証局なので、自分の持っているコンピュータ間の通信が安全になるだけですけれど。

この記事は、実際に認証局を作成したときの作業記録です。
「#」から始まる行は、管理者権限で実行したコマンドです。

作業環境は以下の通りです。

  • FreeBSD 8.2
  • OpenSSL 0.9.8q

まず、認証局のファイルを保存しておく場所を決めます。今回は /opt/ca 以下に作成することにしました。

コマンド実行
# mkdir /opt/ca

次にopensslの設定ファイルを編集します*1*2

openssl.cnf
...
[ CA_default ]
dir = /opt/ca         # 認証局のファイルを置くディレクトリ
...
[ req ]
default_bits = 2048   # デフォルトの鍵の長さ
...

認証局のファイルセットを作成するスクリプト「CA.pl」を少し編集します。*3

CA.pl
...
$CADAYS="-days 3650";   # 認証局の証明書の有効期間
...
$CATOP="/opt/ca";       # 認証局のファイルを作成するディレクトリ
...

認証局のファイルセットを作成するためのスクリプト「CA.pl」を実行します。途中で認証局の情報(CommonNameなど)とパスワードの入力を求められるので、必要な情報を入力します。スクリプトの実行が成功すると、認証局用の証明書*4 が作成されます。

コマンド実行
# perl CA.pl -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
....................++++++
..........++++++
writing new private key to '/opt/ca/private/cakey.pem'
Enter PEM pass phrase:<認証局秘密鍵用のパスワードを入力>
Verifying - Enter PEM pass phrase:<同じパスワードを再度入力>
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Miyagi
Locality Name (eg, city) []:Sendai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Takeda Lab
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:ca.takeda-lab.jp
Email Address []:takeda@cs.tohoku-gakuin.ac.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /opt/ca/private/cakey.pem:<認証局秘密鍵のパスワードを入力>
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            a7:56:fc:e7:41:5d:97:91
        Validity
            Not Before: Dec 27 17:22:59 2011 GMT
            Not After : Dec 24 17:22:59 2021 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Miyagi
            organizationName          = Takeda Lab
            commonName                = ca.takeda-lab.jp
            emailAddress              = takeda@cs.tohoku-gakuin.ac.jp
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                29:2C:0F:F2:DA:43:C1:D7:4D:FF:8F:56:5A:B0:C5:56:1E:4D:25:B1
            X509v3 Authority Key Identifier:
                keyid:29:2C:0F:F2:DA:43:C1:D7:4D:FF:8F:56:5A:B0:C5:56:1E:4D:25:B1
                DirName:/C=JP/ST=Miyagi/O=Takeda Lab/CN=ca.takeda-lab.jp/emailAddress=takeda@cs.tohoku-gakuin.ac.jp
                serial:A7:56:FC:E7:41:5D:97:91

            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Dec 24 17:22:59 2021 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

以上を実行すると認証局として使用するファイルセットが作成されます。認証局の秘密鍵は private/cakey.pem というファイルとして、認証局の公開鍵は cacert.pem というファイルとして作成されています。

一応、秘密鍵ファイルのパーミッションを設定しておきます。

コマンド実行
# chmod 700 /opt/ca/private
# chmod 400 /opt/ca/private/cakey.pem

認証局の秘密鍵をパスワード無しで使いたい場合は、秘密鍵のパスワードを外します。

コマンド実行
# openssl rsa -in /opt/ca/private/cakey.pem -out /opt/ca/private/cakey.pem-nopass
Enter pass phrase for /opt/ca/private/cakey.pem:<秘密鍵のパスワードを入力>
writing RSA key
# mv /opt/ca/private/cakey.pem-nopass /opt/ca/private/cakey.pem

以上で、認証局として必要なファイル作成は完了です。

  1. ここでは、鍵の長さも変更していますが、鍵の長さを気にしない場合は不要です []
  2. FreeBSD 8.2では、opensslの設定ファイルは /etc/ssl/openssl.cnf でした []
  3. FreeBSD 8.2では、/usr/src/crypto/openssl/apps/CA.plにありました []
  4. X509v3 Basic Constraints拡張のCA属性がTRUEに設定されている証明書 []
カテゴリー: サーバの構築 タグ: , , , パーマリンク