前回の投稿の続き
新規ディレクトリ作成
# cd /etc/pki # mkdir tetsis-client # cp tetsisCA/openssl.cnf tetsis-client/
openssl設定ファイル編集
# vim /etc/pki/tetsis-client/openssl.cnf (以下を追加) [ client_cert ] basicConstraints=CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = clientAuth subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer
Apacheの設定
# vim /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」をクリック
- ページが表示される。成功