忘備録
CA
/etc/pki/tls/openssl.cnfがデフォルトで使われる設定ファイルで、これをCA用に修正します。
[ CA_default ]
dir = /etc/pki/CA
x509_extensions = v3_ca
default_days = 365
default_crl_days = 3650
[ req_distinguished_name ]
countryName_default = JP
stateOrProvinceName_default = Kanagawa
localityName_default = Yokohama
0.organizationName_default = yourcompany
organizationalUnitName_default = CA
commonName_default = your.domain
emailAddress_default = mail@your.domain
[ v3_ca ]
keyUsage = cRLSign, keyCertSign
nsCertType = sslCA, emailCA, objCA
サーバ向け
修正した/etc/pki/tls/openssl.cnfを/etc/pki/Server配下にコピーして、
以下の項目を追加/修正します。
[ CA_default ]
x509_extensions = usr_cert
[ req ]
req_extensions = v3_req
[ req_distinguished_name ]
organizationalUnitName_default = WWW
commonName_default = *.your.domain
emailAddress_default = mail@your.domain
[ usr_cert ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
nsCertType = server
クライアント向け
作成した/etc/pki/Server/openssl.cnfを/etc/pki/Client配下にコピーして、
以下の項目を修正します。
[ req_distinguished_name ]
organizationalUnitName_default = DEV
commonName_default = client
emailAddress_default =
[ usr_cert ]
nsCertType = client, email, objsign
CAの各ファイルを作成
$ /etc/pki/tls/misc/CA -newca
$ echo "00" > /etc/pki/CA/crlnumber
$ cd /etc/pki/CA
$ openssl x509 -inform pem -in cacert.pem -outform der -out cacert.der
challengePasswordは、設定するとエラーになるWebブラウザがあった記憶があるので、
空にしておくのが無難だと思います。
crlnumberは、期限切れの証明書などを失効させるのに必要なのですが、
最初は自分で作らなければならないみたいです。
cacert.derは、WebブラウザにCAを登録するためのファイルです。
サーバの秘密鍵を作成
$ cd /etc/pki/Server
$ openssl genrsa -config openssl.cnf -out key.pem -aes256 2048
上記の秘密鍵ファイルの場合、Apacheなどでは起動時にパスワード入力が必要になります。
それを避けたい場合は、さらに以下のコマンドを実行し、生成されたファイルを使います。
$ openssl rsa -in key.pem -out key2.pem
また、MySQLサーバの場合は、こちらのファイルでないとダメでした。
クライアントの秘密鍵を作成
$ cd /etc/pki/Client
$ openssl genrsa -config openssl.cnf -out key.pem -aes256 2048
秘密鍵ファイルのアクセス権を変更
$ chmod 400 /etc/pki/CA/private/cakey.pem
$ chmod 400 /etc/pki/Server/key.pem
$ chmod 400 /etc/pki/Client/key.pem
サーバの証明書を作成(毎年)
$ cd /etc/pki/Server
$ openssl req -new -config openssl.cnf -key key.pem -out csr.pem
$ openssl ca -config openssl.cnf -in csr.pem -out cert.pem
クライアントの証明書を作成(毎年)
$ cd /etc/pki/Client
$ openssl req -new -config openssl.cnf -key key.pem -out csr.pem
$ openssl ca -config openssl.cnf -in csr.pem -out cert.pem
$ openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12
p12形式のファイルが、クライアント証明書としてWebブラウザなどに取り込むファイルです。
ExportPasswordは、設定するとエラーになるWebブラウザがあった記憶があるので、
空にしておくのが無難だと思います。
その場合、Webブラウザなどでパスワードを聞かれたら、空でOKします。
また、以下のようにp12形式のファイルから、証明書と秘密鍵を取り出すこともできます。
$ openssl pkcs12 -in cert.p12 -nocerts -out key.pem -nodes
$ openssl pkcs12 -in cert.p12 -clcerts -nokeys -out cert.pem
例えば、Gitでクライアント認証する場合は、
p12形式ではなく証明書と秘密鍵を個別に指定する必要がありますが、
そういった場合でも、クライアント端末にはcert.p12だけ配布しておけば、
必要な時に上記コマンドによって証明書と秘密鍵を取り出して使うことができます。
期限切れの証明書を失効(毎年)
$ openssl ca -gencrl -revoke /etc/pki/CA/newcerts/?.pem -out /etc/pki/CA/crl.pem
/etc/pki/CA/newcerts配下の証明書の内容をcatなどで確認して、
目的の証明書を指定します。
-outが失効情報のファイルで、例えば、ApacheのSSLCARevocationFileに指定するファイルです。
このファイルが無かったり、空だったりすると、Apacheでエラーになった記憶があるので、
最初の構築時は、証明書を余分に作って失効させておいた方が良いと思います。
/etc/pki/CA配下のcrlnumberやindex.txtを確認すると、失効状況がわかるかと思います。
引用:http://aki2o.hatenablog.jp/entry/2015/01/12/223011