Ubuntuで独自CA構築

Webサーバ上に独自CAを構築して証明書を作成する。
OS: Ubuntu12.04
参考URL: Ubuntu documentation: Certificates

必要なディレクトリを作成

$ sudo mkdir /etc/ssl/CA
$ sudo mkdir /etc/ssl/newcerts

シリアルとインデックス管理ファイルを作成する

$ sudo sh -c "echo '01' > /etc/ssl/CA/serial"
$ sudo touch /etc/ssl/CA/index.txt

openssl.cnfファイルを編集する。

$ sudo cp -p /etc/ssl/openssl.cnf{,.orig}
$ sudo vi /etc/ssl/openssl.cnf
dir = /etc/ssl # Where everything is kept
database = $dir/CA/index.txt # database index file.
certificate = $dir/certs/cacert.pem # The CA certificate
serial = $dir/CA/serial # The current serial number

CAの鍵と証明書を作成 (有効期間10年)

$ sudo openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3652
...
Enter PEM pass phrase: ********
Verifying - Enter PEM pass phrase: ********
...
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Aichi
Locality Name (eg, city) []:Nagoya
Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyHome
Organizational Unit Name (eg, section) []: Dept. for general purpose
Common Name (e.g. server FQDN or YOUR name) []:MyCA
Email Address []: oreore@example.jp

出来上がった鍵と証明書をディレクトリに配置する。

$ sudo mv cakey.pem /etc/ssl/private/
$ sudo mv cacert.pem /etc/ssl/certs/
$ sudo chmod go-rwx /etc/ssl/private/cakey.pem

以上でCAの構築は完了。

以下、サーバ証明書を作成する。
サーバ鍵の作成

$ sudo openssl genrsa -aes256 -out server.key 2048

鍵ファイルに付いてしまったパスワードを削除する。

$ sudo openssl rsa -in server.key -out server.key

CSR作成 (有効期間は5年にしてみる)

$ sudo openssl req -new -days 1826 -key server.key -out server.csr
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Aichi
Locality Name (eg, city) []:Nagoya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyHome
Organizational Unit Name (eg, section) []: Dept. for general purpose
Common Name (e.g. server FQDN or YOUR name) []:www.example.jp
Email Address []: oreore@example.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

先ほど作成したCAでサーバCSRに署名する

$ sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/private/cakey.pem: ********
....

証明書が/etc/ssl/newcerts/01.pemとして作成されるので、証明書ディレクトリにコピーする。
$ sudo cp /etc/ssl/newcerts/01.pem /etc/ssl/certs/server.crt

鍵ファイルも保存しておく

$ sudo cp server.key /etc/ssl/private/server.key
$ sudo chown root:root /etc/ssl/private/server.key
$ sudo chmod go-rwx /etc/ssl/private/server.key