Posted at

X.509 ルート証明書、ルート認証局をOpenSSLで作成する

More than 1 year has passed since last update.


この記事について

OpenSSLを使ったルート証明書(オレオレ証明書)の作成方法を記載します。


OpenSSLコマンド


ルート証明書(オレオレ証明書)の作成

発行者とサブジェクトが同名のルート証明書を作成します。


RSA秘密鍵の生成

鍵長2048bitのRSA秘密鍵を生成する

$ openssl genrsa -des3 2048 > server.key


出力例

Loading 'screen' into random state - done

Generating RSA private key, 2048 bit long modulus
..............+++
.......................+++
e is 65537 (0x10001)
Enter pass phrase:test
Verifying - Enter pass phrase:test


署名リクエスト(request.csr)の作成

68年=24820日有効の設定例です。対話形式で証明書に記載するCN等の入力が促されます。

$ openssl req -new -x509 -days 24820 -key server.key -out request.csr


出力例

Enter pass phrase for server.key:

Loading 'screen' into random state - done
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]:Tokyo
Locality Name (eg, city) []:Your City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your Company
Organizational Unit Name (eg, section) []:Your Section
Common Name (e.g. server FQDN or YOUR name) []:Your FQDN
Email Address []:Your Email


証明書の作成

$ openssl x509 -in request.csr -out server.crt


ダミーのCA認証局を使ってX509v3のサーバー証明書を発行する

ルート証明書では発行者とサブジェクトが同一でした。以下ではOpenSSL付属のCA.plツールを使って、発行者とサブジェクトの異なるサーバー証明書を発行します。


テスト用のルート認証局を新規作成

$/usr/lib/ssl/misc/CA.pl -newca

CAの秘密鍵のパスワードや、署名局の情報入力が促されるので適宜入力します。

 C  => JP

ST => Tokyo
O => Dmy Inc
OU => Dmy OU
CN => Dmy CN

成功すると、/usr/lib/ssl/misc/demoCAが作成され、必要な情報が格納されます。


テスト用のサーバー秘密鍵を作成

PEM形式の秘密鍵newkey.pemを作成します。

$openssl genrsa -des3 2048 > newkey.pem


作成した秘密鍵のパスワードを削除

$openssl rsa -in newkey.pem -out newkey.pem


テスト用のサーバー証明書署名要求(CSR)を作成

$openssl req -new -key newkey.pem -out newreq.pem

サーバー証明書のサブジェクトの入力が促されるので適宜入力します。

C  => JP

ST => Tokyo
O => Corporation
OU => Management Center
CN => www.dmy.co.jp


テスト用のルート認証局を使って、サーバー証明書を発行する

PEM形式の証明書を発行します。

$/usr/lib/ssl/misc/CA.pl -signCA


生成されたnewcert.pemをcrtに変換

crtコンテナにPEM形式の証明書を格納します。

$openssl x509 -in newcert.pem -out server.crt


秘密鍵newkey.pemと証明書server.crtのペアをPKCS #12形式に変換

pfxコンテナに秘密鍵と証明書を格納します。

$openssl pkcs12 -export -inkey newkey.pem -in server.crt -out server.pfx

Password => test

この場合、パスワードが事実上の秘密情報になりますので、保管には十分注意が必要です。