オレオレ認証局でのクライアント証明書の作り方です。
備忘録的に…。なので雑な情報ですが…。
- CentOS 6で実施
#事前準備
認証局のディレクトリを作成
mkdir /etc/pki/caCrt
##設定ファイルの準備
###共通
/etc/pki/tls/openssl.cnfをコピー
以下の3ファイルを作成し、「/etc/pki/caCrt」に配置する
- openssl-ca.cnf
- openssl-server.cnf
- openssl-client.cnf
すべてのファイルに以下の修正を加える
[ CA_default ]
dir = /etc/pki/caCrt
default_days = 3650
[ req ]
default_bits = 2048
default_md = sha256
それぞれのファイルを修正する
openssl-ca.cnf
[ usr_cert ]
basicConstraints = CA:TRUE
nsCertType = client, email
openssl-server.cnf
[ usr_cert ]
basicConstraints = CA:FALSE
nsCertType = server
openssl-client.cnf
[ usr_cert ]
basicConstraints = CA:FALSE
nsCertType = client, email, objsign
#認証局の作成
ディレクトリ整備
$ cd /etc/pki/caCrt
$ mkdir certs
$ mkdir crl
$ mkdir newcerts
$ mkdir private
$ touch index.txt
$ touch serial
$ echo "01" > serial
以下を実行し、認証局の秘密鍵を生成する。
$ openssl req -new -config ./openssl-ca.cnf -x509 -keyout cakey.pem -out cacert.pem -days 3650 -sha256
- 認証局の秘密鍵
- cakey.pem
- 認証局の証明書
- cacert.pem (ブラウザに「信頼されたルート証明書」としてインストールしたりします。)
#サーバ証明書の作成
$ openssl req -new -config ./openssl-server.cnf -sha256 -keyout ./serverkey.key -out servercareq.csr
$ openssl rsa -in ./serverkey.key -out ./serverkey_withpass.key
$ openssl ca -config ./openssl-server.cnf -md sha256 -cert cacert.pem -keyfile cakey.pem -out servercert.crt -infiles servercareq.csr
- サーバ秘密鍵
- serverkey.key
- サーバ証明書
- servercert.crt
#クライアント証明書の作成
$ openssl req -new -config ./openssl-client.cnf -sha256 -keyout clientkey.key -out clientreq.csr
$ openssl ca -config openssl-client.cnf -md sha256 -cert cacert.pem -keyfile cakey.pem -out clientcert.crt -infiles clientreq.csr
$ openssl pkcs12 -export -in clientcert.crt -inkey clientkey.key -out clientcertinbrowser.pfx -name "ssltest.test.jp"
- クライアント秘密鍵
- clientkey.key
- クライアント証明書
- clientcert.crt
- クライアント証明書(クライアント端末にインストールする必要がある)
- clientcertinbrowser.pfx
#Apacheの設定
/etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/caCrt/servercert.crt
SSLCertificateKeyFile /etc/pki/caCrt/serverkey.key
SSLCACertificateFile /etc/pki/caCrt/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 10
完了