本文 |
1. 以下CSR作成用の情報を取得
-----
SSL接続の際のURL (FQDN Common Name) :
国別記号 :
都道府県名 (State or Province) :
市区町村名 (Locality) :
申請団体の正式英語組織名 (Organization) :
部門名 (Organizational Unit) :
-----
2. keyとcsrの作成
# ssl keyのパスワードを決めておいて
su -
mkdir work && cd work
export FQDN=[上記Common Name]
# 2048bit
(openssl genrsa -passout pass:dummy -aes256 -rand /dev/urandom 2048 | openssl rsa -passin pass:dummy) > $FQDN.key 2>/dev/null &&
chmod 600 $FQDN.key &&
openssl req -new -days 365 -key $FQDN.key -out $FQDN.csr
## 以前の1024bitで生成しなければいけない場合
#openssl genrsa -des 1024 > $FQDN.key &&
# openssl rsa -in $FQDN.key -out $FQDN-nopw.key &&
# chmod 600 $FQDN.key $FQDN-nopw.key &&
# openssl req -new -days 365 -key $FQDN-nopw.key -out $FQDN.csr
# 申請内容の確認
openssl req -in $FQDN.csr -text
# 生成されたCSRの表示 → この内容/ファイルを提出
cat $FQDN.csr
# 開発などで一時的に代用の証明書を発行する場合は以下を利用
openssl x509 -in $FQDN.csr -out $FQDN.crt -req -signkey $FQDN-nopw.key -days 365
3. 申請
# CSRを証明機関へ提出
# 発行された証明書及び適合する中間証明書の取得
4. 証明書、中間証明書の整合性確認
# サーバ: ACCEPTで起動すれば秘密鍵と証明書は問題なし
>>> openssl s_server -cert [証明書] -key [秘密鍵] -CAfile [中間証明書] -www
Using default temp DH parameters
ACCEPT
<<<
# クライアント: Verify OKになれば問題なし。それ以外は中間証明書に問題あり
>>> openssl s_client -connect localhost:4433 -showcerts
~~~
Verify return code: 0 (ok)
<<<
5. 証明書、中間証明書、キーファイルを設置
# RHEL/CentOS系なら /etc/pki/tls/certs, privateへ
#
# 追記
#
# クライアント認証の一例
# クライアント認証に使用するファイル置き場を作成する
su -
cd /etc/httpd/conf
mkdir ssl.clcert && cd ssl.clcert && chmod 700 .
# クライアント認証用CA(認証局)の作成
cp -p /usr/share/ssl/misc/CA ./CLCA
>>> vi CLCA
# CATOPを書き換える
CATOP=./clCA
<<<
>>> ./CLCA -newca
#CA certificate filename (or enter to create)
enter
# Country (国) : JP
# State/Province (都道府県) : Tokyo
# City/Location (市区町村) : Chiyoda-ku
# Organization (組織名) : Systemix Inc.
# Organizational Unit (部門名) : system
# Common Name (コモンネーム) : www.systemix.ne.jp
# Email Address [] : info@systemix.ne.jp
<<<
# client証明書の作成
openssl genrsa -des3 -out client.key 1024
>>> openssl req -new -days 365 -key client.key -out clcsr.pem
# Country (国) : JP
# State/Province (都道府県) : Tokyo
# City/Location (市区町村) : Chiyoda-ku
# Organization (組織名) : Systemix Inc.
# Organizational Unit (部門名) : system
# Common Name (コモンネーム) : www.systemix.ne.jp
# Email Address [] : info@systemix.ne.jp
<<<
cp -p /usr/share/ssl/openssl.cnf openssl-client.cnf
>>> vi openssl-client.cnf
# usr_certセクションのnsCertTypeのパラメータが以下の部分をコメントアウト
[ usr_cert ]
~~
nsCertType = client,email
<<<
# web serverに設置する証明書
# JSTは+0900, 期限は -days 365 で指定しても良いです
openssl ca -config openssl-client.cnf \
-enddate YYMMDDHHMISS+0900 -in clcsr.pem -out clcert.pem
# PCにインストールするキーの作成
openssl pkcs12 -export -in clcert.pem -inkey client.key \
-certfile clCA/cacert.pem -out clcert.p12
# パーミッションの変更
chmod 700 CLCA
chmod 600 clcert.p12 clcert.pem clcsr.pem client.key openssl-client.cnf
find clCA -type d -exec chmod 700 {} \;
find clCA -type f -exec chmod 600 {} \;
# キーを紛失した、漏れたなどで失効させる場合、以下を実行
openssl ca -config openssl-client.cnf -gencrl -revoke clcert.pem -out clCA/crl/crl.pem
# キーと証明書が正しいペアかどうかを確認
openssl x509 -in $cert_file -noout -text
openssl rsa -in $key_file -noout -text
# 両方のmodules項目が合致すればOK
4. apache2(httpd)の設定
>>> 例
SSLCertificateFile /etc/httpd/conf/ssl.crt/www.example.com.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/www.example.com-nopw.key
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/inca2011.pem
# for client certificate test.
<Location ~ "/test/.+\.php">
SSLCACertificateFile /etc/httpd/conf/ssl.clcert/clCA/cacert.pem
SSLVerifyClient require
</Location>
<<<
SSLCertificateChainFileに証明機関から指定されている中間証明書を、
SSLCACertificateFileに上記操作にて発行した、自分自身のCAの証明書を指定する必
要があります。
参考
OpenSSLを使った証明書取り扱いプログラミング
http://mars.elcom.nitech.ac.jp/Research/MM/security/openssl/program.html
|