ファイナンス、情報通信技術のスキル・アグリゲーション・サイト
認証局(Certification Authority:CA)は、電子証明書の発行と失効がおもな役割です。認証局には、パブリック認証局とプライベート認証局の2つの形態があります。
パブリック認証局は、商用 CA や信頼された認証局、信頼された証明機関のようにも呼ばれています。パブリック認証局が発行する電子証明書のルート証明書は、主要なウェブブラウザなどにあらかじめ組み込まれていて、その配布やインストールが不要な場合がほとんどです。パブリック認証局が電子証明書の発行する際には、申請者の実在確認を行っています。
プライベート認証局は、自己認証局や独自認証局のようにも呼ばれています。限定した用途や範囲内で電子証明書を配布して使用する場合などに開設されています。また、プライベート認証局は、パブリック認証局から信頼を付与されて、電子証明書を発行している場合もあります。
SSL/TLS 証明書は、
プライベート SSL/TLS 証明書は、プライベート認証局が発行する電子証明書です。個人が認証局を開設して、個人が使用する範囲で暗号化を利用するなど、個人で発行することもできます。
OpenSSL を使用して、プライベート認証局を開設し、プライベート SSL/TLS 証明書を発行する手順をみていきます。
参考として、プライベート認証局を開設せずに、プライベート SSL/TLS 証明書を作成するコマンド例を紹介します。-out server.crt は、出力するサーバ証明書のファイル名。-keyout server.key は、出力する秘密鍵のファイル名。-nodes は、秘密鍵にパスフレーズを設定しない指定。-days の «duration» には、証明書の有効期間の日数を設定します。
$ openssl req -newkey rsa:2048 -nodes -x509 -out server.crt -keyout server.key -days «duration»
コマンドを実行すると、Distinguished Name(ディスティングイッシュネーム情報)の入力が要求されます。
Generating a 2048 bit RSA private key
(省略)...........................+++
(省略)...........................+++
writing new private key to 'server.key'
-----
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) [XX]:
«JP(国名コード)»
State or Province Name (full name) []:
«Tokyo など(都道府県名)»
Locality Name (eg, city) [Default City]:
«Edogawa-ku など(市区町村名)»
Organization Name (eg, company) [Default Company Ltd]:
«PrivateServer など(組織名)»
Organizational Unit Name (eg, section) []:
«(内部組織を判別する任意の文字列:部門名)»
Common Name (eg, your name or your server's hostname) []:
«www.example.jp など(コモンネーム)»
Email Address []:
«(未入力)»
PEM (Privacy Enhanced Mail)は、証明書や秘密鍵などの保管に使用するファイルの形式です。エンコードに Base64 が使用されています。そして例えば、証明書は「-----BEGIN CERTIFICATE-----」から始まり「-----END CERTIFICATE-----」で終わるテキスト形式、パスフレーズのない秘密鍵は「-----BEGIN PRIVATE KEY-----」から始まり「-----END PRIVATE KEY-----」で終わるテキスト形式になっています。
認証局を開設して、Certificate Authority Certificate(認証局自身の証明書)と key(認証局の秘密鍵)を生成します。-days の «duration» には、有効期間の日数を設定します。-keyout の ca.key は、認証局の秘密鍵。-out の ca.crt は、認証局の証明書。なお、オペレーティング・システム(OS)やバージョンによって、SHA-1 がデフォルトのままとなっている場合は、-sha256 をつけます。
$ openssl req -new -x509 -days «duration» -extensions v3_ca -keyout ca.key -out ca.crt -sha256
pass phrase(パスフレーズ)と、Distinguished Name(ディスティングイッシュネーム情報)の入力が要求されます。
Generating a 2048 bit RSA private key
(省略)...........................+++
(省略)...........................+++
writing new private key to 'ca.key'
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) [XX]:
«JP(国名コード)»
State or Province Name (full name) []:
«Tokyo など(都道府県名)»
Locality Name (eg, city) [Default City]:
«Edogawa-ku など(市区町村名)»
Organization Name (eg, company) [Default Company Ltd]:
«PrivateCA など(組織名)»
Organizational Unit Name (eg, section) []:
«(内部組織を判別する任意の文字列:部門名)»
Common Name (eg, your name or your server's hostname) []:
«ca.example.jp など(コモンネーム)»
Email Address []:
«(未入力)»
Server Key(サーバの秘密鍵)を生成します。秘密鍵には、通常、パスフレーズを設定します。
$ openssl genrsa -des3 -out server.key 2048
pass phrase(パスフレーズ)の入力が要求されます。
Generating RSA private key, 2048 bit long modulus
...............+++
...............+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
«(パスフレーズを設定します。)»
Verifying - Enter pass phrase for server.key:
«(設定したパスフレーズをもう一度入力します。)»
サーバソフトウェアのなかには、パスフレーズを設定しているとエラーになる場合があります。パスフレーズを設定しないで秘密鍵を生成する場合です。
$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
(省略)...........................+++
(省略)...........................+++
e is 65537 (0x10001)
Certificate Signing Request(CSR:署名リクエスト)を作成します。
$ openssl req -out server.csr -key server.key -new
Distinguished Name(ディスティングイッシュネーム情報)の入力が要求されます。
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) [XX]:
«JP(国名コード)»
State or Province Name (full name) []:
«Tokyo など(都道府県名)»
Locality Name (eg, city) [Default City]:
«Edogawa-ku など(市区町村名)»
Organization Name (eg, company) [Default Company Ltd]:
«PrivateServer など(組織名)»
Organizational Unit Name (eg, section) []:
«(内部組織を判別する任意の文字列:部門名)»
Common Name (eg, your name or your server's hostname) []:
«www.example.jp など(コモンネーム)»
Email Address []:
«(未入力)»
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
«(未入力)»
An optional company name []:
«(未入力)»
Server Certificate(サーバ証明書)を作成します。-days の «duration» には、有効期間の日数を設定します。
$ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days «duration»
Signature ok
subject=/C=JP/ST=Tokyo/L=Edogawa-ku/O=PrivateServer/CN=www.example.jp
Getting CA Private Key
Enter pass phrase for ca.key:
«(ca.key に設定したパスフレーズを入力します。)»
参考として、Client Certificate(クライアント証明書)の作成もみてみます。
Client Key(クライアントの秘密鍵)を生成します。秘密鍵には、通常、パスフレーズを設定します。
$ openssl genrsa -des3 -out client.key 2048
pass phrase(パスフレーズ)の入力が要求されます。
Generating RSA private key, 2048 bit long modulus
...............+++
...............+++
e is 65537 (0x10001)
Enter pass phrase for client.key:
«(パスフレーズを設定します。)»
Verifying - Enter pass phrase for client.key:
«(設定したパスフレーズをもう一度入力します。)»
パスフレーズを設定しないで秘密鍵を生成する場合です。
$ openssl genrsa -out client.key 2048
Generating RSA private key, 2048 bit long modulus
(省略)...........................+++
(省略)...........................+++
e is 65537 (0x10001)
Certificate Signing Request(CSR:署名リクエスト)を作成します。
$ openssl req -out client.csr -key client.key -new
Distinguished Name(ディスティングイッシュネーム情報)の入力が要求されます。
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) [XX]:
«JP(国名コード)»
State or Province Name (full name) []:
«Tokyo など(都道府県名)»
Locality Name (eg, city) [Default City]:
«Edogawa-ku など(市区町村名)»
Organization Name (eg, company) [Default Company Ltd]:
«PrivateClient など(組織名)»
Organizational Unit Name (eg, section) []:
«(内部組織を判別する任意の文字列:部門名)»
Common Name (eg, your name or your server's hostname) []:
«client.example.jp など(コモンネーム)»
Email Address []:
«(未入力)»
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
«(未入力)»
An optional company name []:
«(未入力)»
Client Certificate(クライアント証明書)を作成します。-days の «duration» には、有効期間の日数を設定します。
$ openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days «duration»
Signature ok
subject=/C=JP/ST=Tokyo/L=Edogawa-ku/O=PrivateClient/CN=client.example.jp
Getting CA Private Key
Enter pass phrase for ca.key:
«(ca.key に設定したパスフレーズを入力します。)»