オレオレ認証局でクライアント証明書をつくる(CentOS7)

前回の投稿の続き

新規ディレクトリ作成

# cd /etc/pki
# mkdir tetsis-client
# cp tetsisCA/openssl.cnf tetsis-client/

openssl設定ファイル編集

/etc/pki/tetsis-client/openssl.cnf を編集

(以下を追加)
[ client_cert ]
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

Apacheの設定

/etc/httpd/conf.d/ssl.conf を編集

# SSLCACertificateFileかSSLCARevocationFileの下あたりに以下を追加
<Directory />
SSLRequireSSL
SSLVerifyClient require
SSLUserName SSL_CLIENT_S_DN_CN
Satisfy Any
Allow from All
SSLRequire %{SSL_CLIENT_S_DN_CN} in {"tetsis"} # 認証ユーザ。複数のユーザを設定するにはカンマ区切りで書く。
</Directory>

Apacheの再起動

# systemctl restart httpd

クライアント証明書の作成

# cd /etc/pki/tetsis-client
# openssl req -config openssl.cnf -new -days 3650 -keyout tetsis.key.pem -out tetsis.req.pem -days 3650 -extensions client_cert
Generating a 2048 bit RSA private key

writing new private key to 'tetsis.key.pem'
Enter PEM pass phrase:  # 秘密鍵のパスフレーズ入力
Verifying - Enter PEM pass phrase:  # 秘密鍵のパスフレーズ入力

Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinagawa-ku]:
Organization Name (eg, company) [tetsis company]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:tetsis  # 認証するユーザ名
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

秘密鍵のパスフレーズ削除

# openssl rsa -in tetsis.key.pem -out tetsis.key.pem
Enter pass phrase for tetsis.key.pem:
writing RSA key

CSRにCA秘密鍵で署名

# openssl ca -config openssl.cnf -days 3650 -policy policy_anything -out tetsis.cert.pem -extensions client_cert -infiles tetsis.req.pem
Using configuration from openssl.cnf
Enter pass phrase for /etc/pki/tetsisCA/private/cakey.pem:  # パスフレーズ入力
Check that the request matches the signature
Signature ok

Certificate is to be certified until Oct  8 08:37:09 2028 GMT (3650 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
  • 秘密鍵: tetsis.key.pem
  • CSR(署名リクエスト): tetsis.req.pem
  • クライアント証明書: tetsis.cert.pem

ブラウザにインポートするp12ファイル作成

# openssl pkcs12 -export -in tetsis.cert.pem -inkey tetsis.key.pem -certfile /etc/pki/tetsisCA/cacert.pem -out tetsis.p12
Enter Export Password:  # パスフレーズ入力(ユーザがアクセスする際に必要になる)
Verifying - Enter Export Password:  # パスフレーズ入力(ユーザがアクセスする際に必要になる)

ブラウザにクライアント証明書(tetsis.p12)をインポート

(20171027追記)クライアント証明書をインポートする場合は、CA証明書も自動的にインポートされる。この場合でも「信頼の設定」が必要なため、CA証明書の方もチェックを忘れないように。

  • 現時点でページにアクセスするとエラーになる
  • 「設定」→「証明書の管理」→「ユーザの証明書」タブを選択し、「インポート」をクリック
  • 作成したp12ファイルを選択し、パスワードを入力
  • 追加したクライアント証明書が表示される
  • 再度ページにアクセスすると「証明書の選択」ウィンドウが表示されるため、「OK」をクリック
  • ページが表示される。成功

参考サイト