CentOS6.3でのCA構築方法。

①OpenSSLの設定を変更しておく。最近の推奨値である鍵長2048bit、メッセージダイジェストsha256に変更する。
# vi /etc/pki/tls/openssl.cnf

106~107行目
default_bits            = 1024
default_md              = sha1
  ↓
default_bits            = 2048
default_md              = sha256

75行目
 default_md      = default               # use public key default MD
  ↓
 default_md      = sha256               # use public key sha256
CA証明書の使用用途(KeyUsage,ExtendedKeyUsage)を指定しておく。[ v3_ca]セクションで、次の行を有効にしておく。それぞれの意味は、NIIのサイトに詳しい解説がある。
basicConstraints = critical,CA:true
keyUsage = cRLSign, keyCertSign , digitalSignature,keyAgreement , keyCertSign , keyEncipherment
extendedKeyUsage = serverAuth, clientAuth

さらに、CSRを作成するときの手間を減らすための設定をする。毎回国名や組織名を入力するのは大変手間がかかる。そこで、入力の手間を減らせるようにopenssl.cnfを変更する。変更した内容が、入力時のデフォルト値になる。

[ req_distinguished_name ]セクションを変更する。内容はサンプルなので、CAを作成したときの名前にあわせて変更する。
・130行目付近
  countryName_default             = XX
   ↓
  countryName_default             = jp

・135行目付近
   #stateOrProvinceName_default    = Default Province
   ↓
   stateOrProvinceName_default   = Japan


・141行目付近
   0.organizationName_default      = Default Company Ltd
   ↓
   0.organizationName_default    = viva-musen

また、クライアント証明書やサーバ証明書を発行するためのテンプレートも作っておく。最終行に追加しておく。これは、証明書の種類がクライアント証明書やサーバ証明書であると言うことを示す情報だ。
[ clientAuth ]
extendedKeyUsage = clientAuth
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

[ serverAuth ]
extendedKeyUsage = serverAuth , clientAuth
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer


②CA管理用のスクリプトを修正。
# cd /etc/pki/tls/misc/
# cp CA CA.sh

# vi CA.sh

65行目
CADAYS="-days 1095"     # 3 years

CADAYS="-days 3650"     # 10 years  ・・・CA証明書の有効期間は長い方が運用上楽。

130行目
 -out ${CATOP}/$CAREQ
 ↓
 -out ${CATOP}/$CAREQ -sha256 -newkey rsa:2048  ・・・鍵長は2048bitにしておこう。

③新規CAの作成。
# ./CA.sh -newca
CA certificate filename (or enter to create)
(enterを押す)
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: (CAの秘密鍵のパスフレーズを入力)
Verifying - Enter PEM pass phrase:(CAの秘密鍵のパスフレーズを再入力)
-----
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 ・・・国名を2文字で入力。
State or Province Name (full name) []:Japan ・・・国名または州名を入力(何か入れておかないと、後でエラーになる)
Locality Name (eg, city) [Default City]:. ・・・都市名を入力。空欄にする場合はピリオド。
Organization Name (eg, company) [Default Company Ltd]:viva-musen ・・・組織名(会社名など)を入力
Organizational Unit Name (eg, section) []: ・・・組織単位(部署名など)を入力。
Common Name (eg, your name or your server's hostname) []:viva-musen-CA  ・・・CAの名前を入力
Email Address []: ・・・emailを入力。空欄でもOK。

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ・・・enterでOK
An optional company name []: ・・・enterでOK
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:(CAの秘密鍵のパスフレーズを入力)
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            **:09:ba:8e:7c:5f:**:16
        Validity
            Not Before: Dec  8 02:31:43 2012 GMT
            Not After : Dec  6 02:31:43 2022 GMT
        Subject:
            countryName               = jp
            stateOrProvinceName       = Japan
            organizationName          = viva-musen
            commonName                = viva-musen-CA
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                7D:75:1A:**:C0:7D:57:0D:6F:**:45:27:2A:5D:C3:3B:**:06:E0:9B
            X509v3 Authority Key Identifier:
                keyid:**:75:1A:61:C0:7D:57:0D:6F:9D:45:27:2A:**:C3:3B:0D:**:E0:9B

            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Dec  6 02:31:43 2022 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
#chmod 600 /etc/pki/CA/private/cakey.pem
CAの秘密鍵を、root以外がアクセスできないように修正


失敗したら、
# rm -rf /etc/pki/CA/*
を実行してから、再度newscaする。
※CAの構築後は、/etc/pki/CA/のファイルは消してはならない!

この時点で、/etc/pki/CA/にたくさんのファイルができている。
/etc/pki/CA/cacert.pem  ・・・CAの公開鍵証明書(RADIUSサーバやクライアントに配布するファイル)
 →Windowsでインポートする場合には、cacert.cerにリネームしておく。
/etc/pki/CA/private/cakey.pem ・・・CAの秘密鍵(非公開のファイル。厳重に管理すること!)


④出来上がったCA証明書の内容確認
# openssl x509 -in /etc/pki/CA/cacert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            bb:09:ba:8e:7c:5f:82:16
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=jp, ST=Japan, O=viva-musen, CN=viva-musen-CA
        Validity
            Not Before: Dec  8 02:31:43 2012 GMT
            Not After : Dec  6 02:31:43 2022 GMT
        Subject: C=jp, ST=Japan, O=viva-musen, CN=viva-musen-CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
 ・
 ・
 ・
O7LRl2gxmbq/XUvbXBWouiBuuizpuCyDTJRjsKIhjw/Pi794CVeQyQVj9/WMra3O
U8RtZlIpGKGCEdg=
-----END CERTIFICATE-----