amazon linux2 + apache2.4 + letsencrypt による ssl化 - end0tknr's kipple - web写経開発
上記entryの続き? として、
クライアント証明書認証の設定メモ(Apache2.4 + CentOS) | あぱーブログ
を、写経(≒コピペ)しています。
認証用 html の作成
今回、https://apache.end0tknr.com/private/ 以下に対し、 クライアント認証化しますので、mkdir と index.html作成を行います。
$ sudo mkdir /var/www/html/private $ sudo vi /var/www/html/private/index.html
private認証局 作成
まず、openssl.cnf の変更と、serial の作成を行います。
$ sudo vi /etc/pki/tls/openssl.cnf [ usr_cert ] old) basicConstraints=CA:FALSE new) basicConstraints=CA:TRUE [ v3_ca ] old) # nsCertType = sslCA, emailCA new) nsCertType = sslCA, emailCA
$ sudo vi /etc/pki/CA/serial 00
その上で、private認証局を作成します。
$ sudo /etc/pki/tls/misc/CA -newca CA certificate filename (or enter to create) : Enter PEM pass phrase: 【ないしょ、≠null】 Verifying - Enter PEM pass phrase: 【ないしょ、≠null】 (略) Country Name (2 letter code) [XX]: JP State or Province Name (full name) []: Tokyo Locality Name (eg, city) [Default City]:【ないしょ、≠null】 Organization Name (eg, company) [Default Company Ltd]: end0tknr.com Organizational Unit Name (eg, section) []: sales Common Name (eg, your name or your server's hostname) []: end0tknr.com Email Address []: 【ないしょ、≠null】 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for /etc/pki/CA/private/./cakey.pem: 【ないしょ、≠null】 Check that the request matches the signature Signature ok
最後に chmod して、この部分は完了です。
$ sudo chmod 400 /etc/pki/CA/private/cakey.pem
client証明書の発行
まず、先程、変更した /etc/pki/tls/openssl.cnf を再び変更します。
$ sudo vi /etc/pki/tls/openssl.cnf [ usr_cert ] old) basicConstraints=CA:TRUE new) basicConstraints=CA:FALSE old) # nsCertType = client, email, objsign new) nsCertType = client, email, objsign [ v3_ca ] old) nsCertType = sslCA, emailCA new) # nsCertType = sslCA, emailCA
次に、mkdir や、秘密鍵/発行要求(CSR)作成を行います。
$ sudo su - # mkdir /etc/pki/tls/client # cd /etc/pki/tls/client/ # sudo openssl genrsa -out client.key 2048 # sudo openssl req -new -key client.key -out client.csr Country Name (2 letter code) [XX]: JP State or Province Name (full name) []: Tokyo Locality Name (eg, city) [Default City]:【ないしょ、≠null】 Organization Name (eg, company) [Default Company Ltd]: end0tknr.com Organizational Unit Name (eg, section) []: sales Common Name (eg, your name or your server's hostname) []: client.end0tknr.com Email Address []:【ないしょ、≠null】 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: NULL An optional company name []: NULL
その上で、client証明書発行と、pkcs12形式への変換を行います。
(pkcs12では、証明書と秘密鍵が1つのファイルに存在します)
# openssl ca -in client.csr -out client.crt # openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12
こまでの操作により、以下の証明書が作成されますので、ブラウザへ、installして下さい。
尚、私の場合、firefoxの設定から、installしました。
/etc/pki/tls/client/client.p12
apache 2.4 の設定変更
ssl.conf を以下のように変更すると、/private 以下のみclient認証されます。
尚、今回は、オレオレ証明書を使用している為、「SSLVerifyDepth 1」としていますが、 正式なCAを使用する場合、「SSLVerifyDepth 10」のようにするのかと思います。
$ sudo vi /etc/httpd/conf.d/ssl.conf old) #SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt new) SSLCACertificateFile /etc/pki/CA/cacert.pem #以下を追加 <Location /private> SSLVerifyClient require SSLVerifyDepth 1 SSLRequire ( %{SSL_CLIENT_S_DN_C} eq "JP" and \ %{SSL_CLIENT_S_DN_ST} eq "Tokyo" and \ %{SSL_CLIENT_S_DN_O} in {"end0tknr.com"} \ or %{REMOTE_ADDR} =~ m/^192\.168.+$/ ) </Location>