サーバ証明書「CRT」の作り方には2通りあるようで、一つは商用CA認証局に依頼して作る方式。
もうひとつは自分でCA認証局を設立して、自己署名でサーバ証明書を作る方式。

当然、商用CA認証局を使うには費用が掛かります。
「秘密鍵」から始まって申請書「CSR」まではサーバ証明書「CRT」を持ちたいサーバ側の作業。
CA認証局はサーバから送られてきた申請書「CSR」を使ってサーバ証明書「CRT」を作る。
ここでは自己署名方式でサーバ証明書を作るので、CA認証局を開局して、申請書「CSR」からサーバ証明書「CRT」を作り出す作業を記す
CA認証局(Certificate Authority)の開局 †
既にインストール済みであるかと思うが、下記パッケージをインストール
[root@ca ~]# yum install openssl
その後、CA認証局の証明書(cacert.pem)を作成する。
[root@ca ~]# cd /etc/pki/tls/misc *作業場所に移動
[root@ca misc]#
[root@ca misc]# /etc/pki/tls/misc/CA -newca
CA certificate filename (or enter to create) *リターンキーを打つ
Making CA certificate ...
Generating a 2048 bit RSA private key
.....+++
.............+++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase: *パスフレーズを入力
Verifying - Enter PEM pass phrase:
-----
(中略)
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo *都道府県
Locality Name (eg, city) [Default City]:xxxxxxxx *区市町村名
Organization Name (eg, company) [Default Company Ltd]:chaperone *会社名、組織名
Organizational Unit Name (eg, section) []:ca *会社での部署名
Common Name (eg, your name or your server's hostname) []:ca.chaperone.jp *CAのサイト名
Email Address []:xxxxxxxx@chaperone.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/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem: *再度パスフレーズを入力
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 13376842596636623013 (0xb9a41777d4d700a5)
Validity
Not Before: Jan 26 01:41:38 2014 GMT
Not After : Jan 25 01:41:38 2017 GMT
Subject:
countryName = JP
(中略)
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Jan 25 01:41:38 2017 GMT (1095 days)
Write out database with 1 new entries
Data Base Updated
[root@ca misc]#
作成されたCA認証局の証明書は/etc/pki/CAに置かれる
*途中、ミス入力、やり直したいならCtrl-Dで終了させ、/etc/pki/CAの中身を削除する。rm -rf /etc/pki/CA/*
[root@ca misc]# cd ../../CA/
[root@ca CA]# pwd
/etc/pki/CA
[root@ca CA]# ls -l *.pem
-rw-r--r-- 1 root root 4497 1月 26 10:41 2014 cacert.pem *CA認証局の証明書
-rw-r--r-- 1 root root 1054 1月 26 10:41 2014 careq.pem
[root@ca CA]#
[root@ca CA]# ls -l ./private/*.pem
-rw-r--r-- 1 root root 1834 1月 26 10:41 2014 ./private/cakey.pem *CA認証局の秘密鍵
[root@ca CA]#
これでCA認証局の準備は完成
サーバ証明書を作成 †
CA認証局が出来たので、申請書(server.csr)からサーバ証明書(server.crt)を作成してみる
申請書は、サーバ証明書を使うサイトで
- 秘密鍵の作成
cd /etc/pki/tls/certs
make server.key
- 申請書の作成
make server.csr
を経て作られる。出来たserver.csrをCA認証局に送ってサーバ証明書(server.crt)を発行します。
[root@ca ~]# openssl ca -out /root/server.crt -infiles /root/server.csr
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 13376842596636623014 (0xb9a41777d4d700a6)
Validity
Not Before: Jan 26 07:07:19 2014 GMT
Not After : Jan 26 07:07:19 2015 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
organizationName = chaperone
organizationalUnitName = ldap
commonName = ldap.chaperone.jp
emailAddress = xxxxxx@chaperone.jp
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
4F:D1:F9:BE:42:95:7F:3D:70:FC:28:39:32:9E:CB:4A:96:F7:1D:F2
X509v3 Authority Key Identifier:
keyid:43:69:6E:5D:44:A3:0B:7D:46:3A:19:FB:FB:09:8C:9E:00:14:27:8B
Certificate is to be certified until Jan 26 07:07:19 2015 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@ca ~]#
作成された/root/server.crtを/etc/pki/CA/cacert.pemと共に要求元へ送ります。
string_mask †
CA認証局でサーバ証明書を作成する際、下記エラーが発生する時があった。
[root@ca ~]# openssl ca -out /root/server.crt -infiles /root/server.csr
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
The stateOrProvinceName field needed to be the same in the
CA certificate (Tokyo) and the request (Tokyo)
[root@ca ~]#
同じstateOrProvinceNameの値(Tokyo)なのにエラーとされてしまうのは、
/etc/pki/tls/openssl.cnfのstring_maskの値が、CA認証局と申請書を作ったマシンで違うため。
CentOSのバージョンでこの値が分かれているので注意が必要かも
- CentOS5 string_mask = MASK:0x2002
- CentOS6 string_mask = utf8only
この値を同じにすればエラーは回避される。
/root/server.crtが0バイトファイル †
/root/server.crtが作られなくて、下記のようなメッセージが生じた場合、
1
2
3
| Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
|
/etc/pki/CA/index.txtの内容を消してから再度実行してみる。
1
2
3
| # rm /etc/pki/CA/index.txt
# touch /etc/pki/CA/index.txt
# openssl ca -out /root/server.crt -infiles /root/server.csr
|
な感じで。