前回の投稿の続き
新規ディレクトリ作成
# 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」をクリック
- ページが表示される。成功