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

前回の投稿の続き

新規ディレクトリ作成 Link to heading

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

openssl設定ファイル編集 Link to heading

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

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

Apacheの設定 Link to heading

/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の再起動 Link to heading

# systemctl restart httpd

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

# 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 []:

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

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

CSRにCA秘密鍵で署名 Link to heading

# 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ファイル作成 Link to heading

# 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)をインポート Link to heading

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

  • 現時点でページにアクセスするとエラーになる

  • 「設定」→「証明書の管理」→「ユーザの証明書」タブを選択し、「インポート」をクリック

  • 作成したp12ファイルを選択し、パスワードを入力

  • 追加したクライアント証明書が表示される

  • 再度ページにアクセスすると「証明書の選択」ウィンドウが表示されるため、「OK」をクリック

  • ページが表示される。成功

参考サイト Link to heading