OpenSSLを使ってオレオレ認証局を構築し,オレオレ証明書を発行してみます。
1.認証局(CA)の簡単な説明
OpenSSLを利用すると,オレオレ証明書を発行することができます。オレオレ証明書とは自己署名証明書の通称?で,自分が正しいことを自分で証明している証明書のことです。なんともインチキ臭いのですが,いわゆるルート証明書というのは,みんな自己署名証明書です。認証局の仕組みでは,認証局は階層構造にすることができて,下位のCAは上位のCAに署名してもらうことで信頼されます。よって,階層構造のトップにあるCAは自分で自分の証明書に署名をすることになります。
そうなると,そのCAが信頼できるかわからないので,PCなどの端末がそのCAを信頼するように設定します。それは,例えばWindowsだと「信頼されたルート証明機関」に最上位CAの証明書を格納します。
Windows10の場合,Cortanaに「certmgr.msc」と入力することで,証明書ストアを開くことができます。「信頼されたルート証明機関」-「証明書」を開くと,そのPCが信頼しているCA証明書の一覧が出てきます。
ということは,「信頼されたルート証明機関」にオレオレ証明書を格納してしまえば,そのPCでオレオレ証明書が有効になるってことです。それではさっそくオレオレ証明書を発行してみましょう。
2.ActivePerlの設定
その前に,ActivePerlを設定する必要があります。OpenSSLのbinフォルダにCA.plというファイルがあります。CAを構築するにはこのファイルを利用するので,Perlがないと動作しないためです。
ActivePerlは窓の杜(http://www.forest.impress.co.jp/library/software/activeperl/)あたりからダウンロードしてくればいいと思います。
インストールが終了すると,デフォルトでは「C:\Perl」にActivePerlがインストールされます。CA.plを右クリックして「プロパティ」を開き,「Perl Command Line Interpreter」に変更します。「Perl Command Line Interpreter」は「C:\Perl\bin\perl.exe」のことです。
次に,Perlにパスを通しておきます。OpenSSLをインストールした時と同じ要領で,「C:\Perl\bin」を環境変数に追加します。(Windows10だと再起動しないとパスが有効にならないかも)
インストールが成功していることを確認するために,コマンドプロンプトからPerlのバージョンの確認をしてみます。「perl -version」とコマンドを打つと,バージョン情報が表示されました。
それでは,今度こそオレオレ証明書を発行してみましょう。
3.認証局(CA)の構築
OpenSSLでCAを構築する手順は,OpenSSLの本などを参照すると,本当に詳細に書いてあります。
まず,設定ファイルを確認します。テキストエディタで「openssl.cfg」を開きます。「openssl.cnf」と書いてあるサイトもあるみたいですが,今回構築しているバージョン(1.0.2g)は「openssl.cfg」が設定ファイルのようです。基本的にデフォルトで動作しますが,どんなファイルなのか中身をのぞいてみましょう。
3.1 設定ファイルの変更
いろいろな設定ファイルが並んでます。今回は基本的にはデフォルトを利用して,必要な項目だけ変更することにします。
・ハッシュアルゴリズムの変更
ハッシュアルゴリズムがデフォルトだとMD5だと思います。MD5は2016年現在利用推奨されておりませんので,SHA-256に変更します。SHA-1も推奨されていません。
・証明書の有効期限の変更
証明書の有効期限がデフォルトでは1年です。CA証明書の場合は,有効期限が切れて再発行すると,発行済みのすべてのClient証明書の再発行が必要なため,20年など長期に設定します。
一方,Client証明書は1年~5年位の有効期限を設定するのが一般的です。WebTrust認定を取っているPublic認証局の場合は3年以上の有効期限を持つ証明書を発行できない決まりみたいです。
[ CA_default ] (省略) # 証明書の有効期間を1年から5年にしてみる。 #default_days = 365 # how long to certify for default_days = 7305 # 20年(365×20+5日) default_crl_days= 30 # how long before next CRL # デフォルトのメッセージダイジェストアルゴリズムをSHA-256にする。 #default_md = default # use public key default MD default_md = sha256 # SHA-256を使う
・CAのタイプを設定
CAが何に利用されるかを指定することができる拡張領域です。sslCA, emailCAを有効にしておきます。
[ v3_ca ] (省略) # Some might want this also # nsCertType = sslCA, emailCA nsCertType = sslCA, emailCA
・データを保存するフォルダを作成
CAのデータを保存するフォルダを作成します。CAの構築はコマンドラインで実施します。今回は「C:\myCA」を作成しました。コマンドプロンプトを立ち上げて,このフォルダをカレントにしておきます。
3.2 CAの構築
認証局を作成するには,「CA.pl -newca」のコマンドを実行すればOKです。ただし,Perlの拡張子「.pl」を自己起動の設定にしていない場合,「CA.pl」を実行しても,何も起きません。下記のように,perlを指定してCA.plのパスを指定しましょう。
処理を実行している途中に,CAのパスワードを入力するところがあります。入力したCAのパスワードは忘れないようにしましょう。
実行結果は以下の通り。(少し編集してあります)
C:\myCA>perl C:\OpenSSL-Win32\bin\CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 2048 bit RSA private key .......+++ ........................................+++ writing new private key to './demoCA/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) [AU]:JP # ← 国名を入れる State or Province Name (full name) [Some-State]:Tokyo # ← 県名を入れる Locality Name (eg, city) []:Hogehoge # ← 町の名前を入れる Organization Name (eg, company) [Internet Widgits Pty Ltd]:Trusted Design # ← 会社名を入れる Organizational Unit Name (eg, section) []:myCA # ← 組織名を入れる Common Name (e.g. server FQDN or YOUR name) []:myCA # ← CA名を入れる Email Address []:admin@trusted-design.net # ← 管理者のメールアドレスを入れる Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: # ← 何も入れずリターン An optional company name []: # ← 何も入れずリターン Using configuration from C:\OpenSSL-Win32\bin\openssl.cfg Enter pass phrase for ./demoCA/private/cakey.pem: # ← 上で入れたパスワードを入力(何も表示されません) Check that the request matches the signature Signature ok Certificate Details: Serial Number: c3:b0:ac:cb:99:9b:d8:da Validity Not Before: Mar 19 00:48:23 2016 GMT Not After : Mar 19 00:48:23 2019 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = Trusted Design organizationalUnitName = myCA commonName = myCA emailAddress = admin@trusted-design.net X509v3 extensions: X509v3 Subject Key Identifier: D0:59:65:97:90:8C:DA:A2:EC:5F:79:94:4C:AF:5E:94:FB:C1:B2:23 X509v3 Authority Key Identifier: keyid:D0:59:65:97:90:8C:DA:A2:EC:5F:79:94:4C:AF:5E:94:FB:C1:B2:23 X509v3 Basic Constraints: CA:TRUE Netscape Cert Type: SSL CA, S/MIME CA Certificate is to be certified until Mar 19 00:48:23 2019 GMT (1095 days) Write out database with 1 new entries Data Base Updated
すると,先に作成した「C:\myCA」の下に,「demoCA」のフォルダができて,その中にCAの情報が入りました。これでオレオレ認証局が開設できました。
今発行したCA証明書は。「cacert.pem」です。どうせならダブルクリックすると証明書の内容がみられるようにしたいので,フォーマットを変換します。コマンドプロンプトのカレントを「demoCA」に移動して,次のコマンドを実行します。
openssl x509 -in cacert.pem -out cacert.cer
すると,証明書のアイコンのファイル「cacert.cer」ができました。
発行元(イシュア)と発行先(サブジェクト)が同じなのがルート証明書になります。PCで利用する場合には,これを「信頼されたルート証明機関」にインポートします。