自前認証局およびサーバ証明書
認証局サーバ
openssl をインストール
# yum install openssl
ルート認証局(ルートCA)
ルートCA用の設定ファイル(openssl_rca.cnf)を作成
# cd /etc/pki/tls # mkdir RCA # cp openssl.cnf openssl_rca.cnf # vi /etc/pki/tls/openssl_rca.cnf
#-- ディレクトリ変更(※2箇所あるので2箇所とも変更する) dir = /etc/pki/tls/RCA # Where everything is kept dir = /etc/pki/tls/RCA # TSA root directory #-- 認証種別変更(コメントアウトを削除) [ v3_ca ] # Some might want this also nsCertType = sslCA, emailCA #-- サーバ証明書署名時のNetscape用認証種別変更(コメントアウトを削除) [ usr_cert ] # This is OK for an SSL server. nsCertType = server #-- 暗号化bit数の変更(2048bit)、sha256に変更 [ req ] default_bits = 2048 default_md = sha256 #-- 証明書有効期間の変更(10年)、sha256に変更 [ CA_default ] default_days = 3650 # how long to certify for default_md = sha256 # use public key default MD
ルートCA用の生成スクリプト(RCA)を作成
# cd /etc/pki/tls/misc/ # cp CA RCA # vi RCA <code> <file RCA> #-- 31行目あたりに追加 CATOP=/etc/pki/tls/RCA SSLEAY_CONFIG="-config /etc/pki/tls/openssl_rca.cnf" </file> === ルートCAの作成 === <code> # /etc/pki/tls/misc/RCA -newca
CA certificate filename (or enter to create) Making CA certificate ... Generating a 2048 bit RSA private key ......................................+++ ........................................+++ writing new private key to '/etc/pki/tls/RCA/private/./cakey.pem' Enter PEM pass phrase:【認証局の秘密鍵のパスワード】 Verifying - Enter PEM pass phrase:【認証局の秘密鍵のパスワード確認】 ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Shinjuku-ku Organization Name (eg, company) [Default Company Ltd]:【会社名】 Organizational Unit Name (eg, section) []:【部署名】 Common Name (eg, your name or your server's hostname) []:【ルート認証局名】 Email Address []: 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_rca.cnf Enter pass phrase for /etc/pki/tls/RCA/private/./cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 10114454966224013030 (0x8c5dc333fe77c6e6) Validity Not Before: Jan 25 10:28:35 2017 GMT Not After : Jan 25 10:28:35 2020 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = 【会社名】 organizationalUnitName = 【部署名】 commonName = 【ルート認証局名】 X509v3 extensions: X509v3 Subject Key Identifier: BA:88:C0:D8:F1:2B:CE:A8:17:44:9B:63:97:93:B4:A4:29:F4:81:4F X509v3 Authority Key Identifier: keyid:BA:88:C0:D8:F1:2B:CE:A8:17:44:9B:63:97:93:B4:A4:29:F4:81:4F X509v3 Basic Constraints: CA:TRUE Netscape Cert Type: SSL CA, S/MIME CA Certificate is to be certified until Jan 25 10:28:35 2020 GMT (1095 days) Write out database with 1 new entries Data Base Updated
配布用のderファイルを作成
# cd /etc/pki/tls/RCA # openssl x509 -inform pem -in cacert.pem -outform der -out rca.der
RCA証明書の場所
RCA秘密鍵: /etc/pki/tls/RCA/private/cakey.pem
RCA証明書: /etc/pki/tls/RCA/cacert.pem
配布用のルートCA証明書: /etc/pki/tls/RCA/rca.der
中間認証局(中間CA)
中間CA用の設定ファイル(openssl_ica.cnf)を作成
# cd /etc/pki/tls # mkdir ICA # cp openssl_rca.cnf openssl_ica.cnf # vi openssl_ica.cnf
:%s@/etc/pki/tls/RCA@/etc/pki/tls/ICA@g
中間CA用の生成スクリプト(ICA)を作成
# cd /etc/pki/tls/misc/ # cp RCA ICA # vi ICA
#-- 33行目あたり CATOP=/etc/pki/tls/ICA SSLEAY_CONFIG="-config /etc/pki/tls/openssl_ica.cnf"
中間CAのルートCAに対する申請書(newkey.pem)を作成
# cd /etc/pki/tls/ICA # /etc/pki/tls/misc/ICA -newreq
Generating a 2048 bit RSA private key .............................+++ ....................................................+++ writing new private key to 'newkey.pem' Enter PEM pass phrase:【中間認証局の秘密鍵のパスワード】 Verifying - Enter PEM pass phrase:【中間認証局の秘密鍵のパスワード確認】 ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Shinjuku-ku Organization Name (eg, company) [Default Company Ltd]:【会社名】 Organizational Unit Name (eg, section) []:【部署名】 Common Name (eg, your name or your server's hostname) []:【中間認証局名】 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem
ルート認証局を使って中間認証局の要求証明書を署名する
# cd /etc/pki/tls/ICA # /etc/pki/tls/misc/RCA -signCA
⇒ パスワード入力し、y、yでnewcert.pemが作成される。
中間認証局を認証局として動作させる
# /etc/pki/tls/misc/ICA -newca
CA certificate filename (or enter to create)
⇒ /etc/pki/tls/ICA/newcert.pem を指定する。
中間認証局の秘密鍵をファイル名を変更して private ディレクトリへ移動する
# cd /etc/pki/tls/ICA # mv newkey.pem private/cakey.pem
配布用のderファイル、ApacheやNginx用CRTファイルを作成
# cd /etc/pki/tls/ICA # openssl x509 -inform pem -in cacert.pem -outform der -out ica.der # openssl x509 -in cacert.pem -out ica.crt
中間CA証明書の場所
中間CA証明書(ルートCAで署名済): /etc/pki/tls/ICA/ica.crt
配布用の中間CA証明書: /etc/pki/tls/ICA/ica.der
サーバ証明書
【証明書設置サーバ】
サーバー証明書の秘密鍵(server.key)作成
# mkdir /etc/ssl/[DOMAIN] # cd /etc/ssl/[DOMAIN] # openssl genrsa -out server.key 2048
暗号化方式 AES256
# openssl genrsa -aes256 -out server.key 2048 ### パスワードを要求されるので解除 # openssl rsa -in server.key -out server.key
CSR(署名要求 server.csr)を作成
# openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Shinjuku-ku Organization Name (eg, company) [Default Company Ltd]:【会社名】 Organizational Unit Name (eg, section) []:【部署名】 Common Name (eg, your name or your server's hostname) []:【HOSTNAME】 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
【中間認証局サーバ】
中間認証局を使ってサーバ証明書を発行する
# cd /etc/pki/tls/private
証明書設置サーバで作成したserver.csrをコピペ
# vi newreq.pem
中間認証局と同一サーバなら
# cp server.csr /etc/pki/tls/private/newreq.pem
# /etc/pki/tls/misc/ICA -sign
⇒ パスワード入力し、y、yでnewcert.pemが作成される。
failed to update database TXT_DB error number2 発生時の対処(再発行時)
/etc/pki/tls/ICA/index.txt の内容を削除
# mkdir /etc/ssl/[DOMAIN]
使用したCSR「newreq.pem」を移動しておく
# mv /etc/pki/tls/private/newreq.pem /etc/ssl/[DOMAIN]/
「newcert.pem」ファイルを移動して、CRTファイルを作成
# mv /etc/pki/tls/private/newcert.pem /etc/ssl/[DOMAIN]/ # cd /etc/ssl/[DOMAIN]/ # openssl x509 -in newcert.pem -out server.crt
中間認証局と同一サーバなら
# cp /etc/pki/tls/ICA/ica.crt ./
【証明書設置サーバ】
# cd /etc/ssl/[DOMAIN]
証明書
中間認証局サーバ /etc/ssl/[DOMAIN]/server.crt をコピペ
# vi server.crt
中間証明書
中間認証局サーバ /etc/pki/tls/ICA/ica.crt をコピペ
# vi ica.crt # vi /etc/httpd/conf.d/ssl.conf
#-- 認証局からもらったサーバ証明書 SSLCertificateFile /etc/ssl/[DOMAIN]/server.crt #-- サーバ証明書のために作った秘密鍵 SSLCertificateKeyFile /etc/ssl/[DOMAIN]/server.key #-- 中間証明書ファイル SSLCertificateChainFile /etc/ssl/[DOMAIN]/ica.crt #-- 認証局の公開鍵 SSLCACertificateFile
参考サイト
(旧) 猫好きモバイルアプリケーション開発者記録 オレオレ証明書を信頼のおけるSSL証明書にしてみる Vol.2 (認証局と証明書の作成)
http://mobileapplication.blog.fc2.com/blog-entry-23.html
コメント