オレオレ認証局クライアント証明書の作り方(sha256)


オレオレ認証局でのクライアント証明書の作り方です。
備忘録的に…。なので雑な情報ですが…。

  • 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

完了