○ 認証局と証明書の発行

*独自のCA (認証局)をつくり、証明書を発行します
*fedoraのパッケージをCentOS用にアレンジします
*openssl-0.9.8nの場合です
*CA管理者とサーバ管理者と別けて考えます
*作成スクリプト (misc/CA.pl) を使います
*サーバ認証用の証明書を発行します

**以降はコメントです

*ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
*設定ファイルで "#" で始まる行はコメントとして解釈されます

○参照ファイル

最初の設定 (Xen)
opensslのインストール

○作業環境

:OS CentOS 5.5
:selinux disabled or permissive
:作業 /etc/pki
:言語 LANG=en_US.UTF-8
:ユーザー  rootで実行



○スクリプトの修正

:/etc/pki/tls/misc/CA.pl (変更分)

*CA.plを使うにはopenssl-perlをインストールします
*サーバ証明書の有効期間を変更します(デフォルトでは1年)
*CA証明書の有効期間を変更します(デフォルトでは3年)
*# 記号はコメント (設定の無効) を示します
紫色部分 追加変更

*省略

$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
$DAYS="-days 730";
$CADAYS="-days 3650";
$REQ="$openssl req $SSLEAY_CONFIG";
$CA="$openssl ca $SSLEAY_CONFIG";
$VERIFY="$openssl verify";
$X509="$openssl x509";
$PKCS12="$openssl pkcs12";

*省略


○コンフィグファイルの修正

:/etc/pki/tls/openssl.cnf

*サーバ証明書の有効期間を変更します (デフォルトでは1年)
*CA.plで -days を使用しない場合に、こちらが使われます
*certタイプを server にします
*# 記号はコメント (設定の無効) を示します

[ CA_default ]
#default_days = 365
default_days = 730

[ usr_cert ]
#nsCertType = server
nsCertType = server

[ v3_ca ]
nsCertType = sslCA, emailCA



○ルートCA (認証局) の証明書と秘密鍵の作成

*CA管理者として作業します

# cd /etc/pki/tls/misc
# ./CA.pl -newca
CA certificate filename (or enter to create)← そのままEnterキー

Making CA certificate ...

Generating a 1024 bit RSA private key
............++++++
.........++++++
writing new private key to '../../CA/private/cakey.pem'
Enter PEM pass phrase:← CA管理者パスフレーズ
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) [GB]:JP
State or Province Name (full name) [Berkshire]:Saitama
Locality Name (eg, city) [Newbury]:Mycity
Organization Name (eg, company) [My Company Ltd]:ko-jiyaCA
Organizational Unit Name (eg, section) []:Admin
Common Name (eg, your name or your server's hostname) []:528p.com
Email Address []:designbox@528p.com

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 ../../CA/private/cakey.pem:← CA管理者パスフレーズ

*省略

Write out database with 1 new entries
Data Base Updated       

*CAディレクトリ、証明書 (cacert.pem)、秘密鍵 (cakey.pem) がつくられます
*秘密鍵の扱いに注意 パーミッションを変更しておきます
*さらにサーバ証明書作成後、別の場所に保管したほうが安全です

# cd /etc/pki/CA
# chmod 600 cacert.pem
# chmod 600 careq.pem
# chmod 600 private/cakey.pem
# chmod 600 newcerts/*.pem

*作成された証明書の確認

# cd /etc/pki/CA
# openssl x509 -in cacert.pem -text



○サーバの公開鍵とCAへの申請書の作成

*サーバ管理者として作業します
*使用するサーバ毎に作ります(例 メールサーバ用)
*Common Name に証明書を使用するサーバのフルドメイン名を入れます

*注意 パスフレーズはrootのパスワードではありません

# cd /etc/pki/tls/misc
# ./CA.pl -newreq
Generating a 1024 bit RSA private key
.......++++++
..++++++
writing new private key to 'newreq.pem'
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) [GB]:JP
State or Province Name (full name) [Berkshire]:Saitama
Locality Name (eg, city) [Newbury]:Mycity
Organization Name (eg, company) [My Company Ltd]:ko-jiya528
Organizational Unit Name (eg, section) []:Admin
Common Name (eg, your name or your server's hostname) []:mail.528p.com
Email Address []:designbox@528p.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
Request is in newreq.pem, private key is in newkey.pem



○認証局によるサーバ申請書への署名

*CA管理者として作業します
*/etc/pki/tls/misc/newcert.pemが作られます
*時刻設定にUTCを使用している場合、ずれが生じます

# cd /etc/pki/tls/misc
# ./CA.pl -sign
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/cakey.pem:← CA管理者のパスフレーズ
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            93:35:9a:96:aa:8e:90:10
        Validity
            Not Before: May 27 22:29:00 2010 GMT
            Not After : May 26 22:29:00 2012 GMT

*省略

Certificate is to be certified until May 26 22:29:00 2012 GMT (730 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
Signed certificate is in newcert.pem

*newreq.pem、newkey.pem、newcert.pemのパーミッションの変更
*/etc/pki/CA/newcerts/*.pemのパーミッションの変更

# cd /etc/pki/tls/misc
# chmod 600 newreq.pem
# chmod 600 newkey.pem
# chmod 600 newcert.pem
# chmod 600 ../../CA/newcerts/*.pem

*newreq.pem、newkey.pem、newcert.pem は次に作られるファイルとコンフリクトします
*作業終了後、適当なディレクトリに保存し管理します



○サーバ用の証明書・公開鍵の使用

*サーバ用CA証明書 (cacert.crt) を作ります

# cd /etc/pki/tls
# openssl x509 -in ../CA/cacert.pem -out cacert.crt

*CA証明書をバイナリDERフォーマットにします (ブラウザに読み込んで使用します)

# cd /etc/pki/tls
# openssl x509 -inform pem -in ../CA/cacert.pem -outform der -out cacert.der

*newcert.pem からサーバ証明書 (mail-server.crt) を作ります

# cd /etc/pki/tls/misc
# openssl x509 -in newcert.pem -out mail-server.crt

*newkey.pem からパスフレーズを除いた公開鍵 (mail-server.key) を作ります
*サーバの自動起動でパスフレーズを要求されないためです

# cd /etc/pki/tls/misc
# openssl rsa -in newkey.pem -out mail-server.key
Enter pass phrase for newkey.pem:← サーバ管理者のパスフレーズ
writing RSA key

*パスフレーズを付けたければ、次のコマンドを実行してパスフレーズを指定します

# openssl rsa -des3 -in mail-server.key -out mail-server.key

*ファイルのパーミッション・グループの変更をします
*証明書と公開鍵をサーバで設定した場所にコピーします

# cd /etc/pki/tls/misc
# chmod 440 certs/mail-server.crt
# chmod 440 private/mail-server.key
# cp -a mail-server.crt ../certs/
# cp -a mail-server.key ../private/

*postfix(ユーザ・グループ)作成後に実行

# chgrp postfix /etc/pki/tls/certs/mail-server.crt
# chgrp postfix /etc/pki/tls/private/mail-server.key

○selinuxヘの対応 (selinuxが有効の場合)

# restorecon -Rv /etc

○ Copyright(c) 528p.com All Rights Reserved.