- Details
-
Category: OpenSSL
-
Written by Administrator
サーバ証明書を入手するには、インターネット上への公開を目的とするサーバの場合にはベリサインなどの商用認証局によって承認された証明書を入手する必要があります。 しかし、社内のWeb掲示板や社内メールサーバの場合、利用者が組織内の人間に限られる利用者の環境に自己CAの証明書をインポートするなどの工夫をすることで、有償のCAを使うことなくサーバ証明書を使って行う暗号化などが利用できることです。
以下ではOpenSSLを使った自己認証局の建て方と、サーバ署名要求(CSR)への署名のおこないかたを説明します。
1.openssl.cnf を認証局用に作成する
署名要求書(CSR)の作成の際にも編集した openssl.cnf ですが、これを認証局用に編集します。 オリジナルは残しておいた方が良いので、openssl_server.cnf というファイルで作成します。
(Debian, Ubuntuの場合)
$ sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl_server.cnf
(Redhat, CentOSの場合)
# cp /etc/ssl/openssl.cnf /etc/ssl/openssl_server.cnf
作成した openssl_server.cnf を以下のような条件で自己認証局(CA)用に編集していきます。
| 設定内容 | 設定値
|
| 認証局(CA)の証明書の有効期限 | 7300日(約20年)
|
証明書の有効期限
| 3650日(約10年)
|
CA関連のデータディレクトリ
| /etc/ssl/CA
|
CA用のプライベートキーファイル
| cakey.pem
|
CA証明書のファイル
| cacert.pem
|
CAのプライベートキーのパスフェーズ
| ******
|
カントリー名
| JP
|
県(州)名
| Tokyo
|
地域名
| oote-machi 1,Chiyodaku-ku
|
組織名
| Hogehoge corp.
|
所属名
| -
|
※証明書の有効期限について利用している環境によって注意が必要です。 伝統的なUnixのTime関数では、1970/1/1を起点にlong int型にて日付の計算を行っていますが、その限界が2028年にきてしまいます。
このため、証明書の期間で2028年を越えるような日付を指定してしまうと、その証明書がいきなり無効になってしまう結果になります。 有効期限は取りあえず2028年にならない程度にすることをお勧めします。
/etc/ssl/openssl_server.cnf
;; #################################################################### [ ca ] default_ca = CA_default # The default ca section
#################################################################### [ CA_default ] # dir = ./demoCA dir = /etc/ssl/CA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. #unique_subject = no # Set to 'no' to allow creation of ;; ;; default_days=3650 # several ctificates with same subject. ;; ;; # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = optional organizationName = match :: [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = JP countryName_min = 2 countryName_max = 2
stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Tokyo
localityName = oote-machi 1,Chiyodaku-ku
0.organizationName = Organization Name (eg, company) 0.organizationName_default = Hogehoge corp. organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = ;; ;; emailAddress = Email Address emailAddress_max = 64 :: ;; [ usr_cert ] basicConstraints=CA:FALSE nsCertType = server ;;
|
openssl.cnfの「basicConstraints」「nsCertType」と違うことに注意してください。
2.CA作成スクリプトとの実行
続いて、CA作成用のスクリプトを実行しCAを構成します。 OpenSSLでは一般的にCA.shおよびCA.plというCA作成用のスクリプトが用意されている筈で、どちらを使ってもCAが作成できますが、CA.plはPerlの環境が無いと動かないため、本資料ではCA.shを使った例を説明します。(Redhat、CentOSではCA.shではなく /etc/pki/tls/misc/CA というファイルになっています。)
/usr/lib/ssl/misc/CA.sh (/etc/pki/tls/misc/CA) を変更
;; # DAYS="-days 365" # 1 year # CADAYS="-days 1095" # 3 years DAYS="-days 3650" # 10 year CADAYS="-days 7300" # 20 years REQ="$OPENSSL req $SSLEAY_CONFIG" CA="$OPENSSL ca $SSLEAY_CONFIG" VERIFY="$OPENSSL verify" X509="$OPENSSL x509"
# CATOP=./demoCA CATOP=/etc/ssl/CA CAKEY=./cakey.pem CAREQ=./careq.pem CACERT=./cacert.pem
;;
|
編集が出来たならスクリプトを実行します。
(Debian,Ubuntuの場合)
$ sudo mkdir /etc/ssl/CA
$ sudo /usr/lib/misc/CA.sh -newca
(Redhat,CentOSの場合)
# mkdir /etc/ssl/CA
# /etc/pki/tls/misc/CA -newca
以下のような画面が表示されるので、質問に答えていきます。
CA certificate filename (or enter to create) <---- 上位のCAの証明書が有る場合に指定する。今回は何もないので[Enter] Making CA certificate ... Generating a 1024 bit RSA private key ...++++++ ................++++++ writing new private key to '/etc/ssl/CA/private/./cakey.pem' Enter PEM pass phrase: ****** <---CAのパスフェーズ(パスワード)設定 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) [JP]: <--- JPのままで良いので[Enter] State or Province Name (full name) [Tokyo]: <--- Tokyoで良いのでそのまま[Enter] oote-machi 1,Chiyodaku-ku []: <--- oote-machi 1,Chiyodaku-ku のままで良いので[Enter] Organization Name (eg, company) [Hogehoge corp. ]: <--- Hogehoge corp. で良いので[Enter] Organizational Unit Name (eg, section) []: [Enter] Common Name (eg, YOUR name) []: ca.example.jp <--- CAサーバのDNS上の正式名 Email Address []:
This email address is being protected from spambots. You need JavaScript enabled to view it.
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: [Enter] An optional company name []: [Enter] Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for /etc/ssl/CA/private/./cakey.pem: <---先程設定したパスフェーズを入力 Check that the request matches the signature Signature ok ;; ;; Write out database with 1 new entries Data Base Updated # |
Common Name(ここでは"ca.example.jp")は、必ずDNSに登録されている名前を指定してください。
作成したCAの証明書の内容は以下のコマンドで確認できます。
(Debian,Ubuntuの場合)
$ sudo openssl x509 -in /etc/ssl/CA/cacert.pem -text
(Redhat,CentOSの場合)
# openssl x509 -in /etc/ssl/CA/cacert.pem -text
以上で認証局の準備は完了です。(簡単ですね!)
後は、各サーバの署名要求書(CSR)がメールやUSBやFDなどで送られてくるのを待つだけです。
なお、ここで作成したCA(自己認証局)は当たり前ですが、インターネット上の商用CA(Verisign等)のように信用されたCAとして認識されていません。 そのため、このCAにて署名されたサーバ証明書を使ったサイトへアクセスすると「信頼されていない認証局の証明書」である旨の警告を常に告げられます。
これを避けるには、Windowsがクライアントの場合には自己認証局を信頼できる認証局であると登録すれば、それ以後は警告が表示されないようになります。
Windowsに信頼できる認証局として登録させるには、まず認証局の証明書をWindows用(DER形式の証明書)に作成します。
■Windows用のCAの証明書の作成方法
(Debian,Ubuntuの場合)
$ sudo openssl x509 -inform pem -in /etc/ssl/CA/cacert.pem -outform der -out /etc/ssl/CA/cacert.cer
(Redhat,CentOSの場合)
# openssl x509 -inform pem -in /etc/ssl/CA/cacert.pem -outform der -out /etc/ssl/CA/cacert.cer
これで作成された"cacert.cer"ファイルをWindows側でルート証明書としてインポートすれば、以後はこの自己認証局で証明されたサーバ証明書は、信頼された認証局のものとして扱われます。
インポートは、[コントロールパネル]-[インターネットオプション]-[コンテン ツ]-[証明書]-[信頼されたルート証明書]タブを開き、[インポート]ボタンを選択します。インポートするファイルとして cacert.cer を指定します。証明書を配置する場所を確認してくるので、「証明書をすべて次のストアに配置する」を選択して「信頼されたルート証明機関」を選びます
なお、WebブラウザにFirefoxを利用する場合、ルート証明書の管理はFirefox自体で行っているので、Firefoxの[ツール]ー[オプション]ー[詳細]で[暗号化]ー[証明書を表示]を選択して、同じようにルート証明書としてインポートを実行してください。
3.署名要求書に署名する手続き
各サーバからの署名要求書(CSR)への署名は以下の手順でおこないます。
(Debian, Ubuntuの場合)
$ sudo openssl ca -config /etc/ssl/openssl_server.cnf -in csrファイル名 -keyfile /etc/ssl/CA/private/cakey.pem -cert /etc/ssl/CA/cacert.pem -out server.pem
(Redhat, CentOSの場合)
# openssl ca -config /etc/ssl/openssl_server.cnf -in csrファイル名 -keyfile /etc/ssl/CA/private/cakey.pem -cert /etc/ssl/CA/cacert.pem -out server.pem
この結果、CSRファイルに対するCAの署名付きのサーバ証明書ファイル「server.pem」が作成されます。 作成されたファイルを、CSRの送りもとに返却すれば証明書への署名手続きは完了です。
CSRの送りもとは、server.pemを適当なファイル名にして、利用するサーバソフトで証明書として指定すればSSL(TSL)を使った通信ができるようになります。