以前に、Windows Server 2008でVPNを構築する記事を書きました。SSTPと呼ばれる方式で通信するのですが、SSLを使用しているため証明書が必要でした。その証明書の発行に、ActiveDirectory 証明書サービスを利用しました。この方法では、不要なIISもインストールしなければならなく、余計なサービスが動作してしまいます(Enterprise以上ならIISは不要で可能)。今回は別の方法で、証明書さえ発行できればいいので、LinuxとOpenSSLで作ったCAを使用して、証明書を発行してみることにします。結果から言うと、こっちの方が簡単でした。
手順は以下の通り。環境は、CentOS 5.4 x86_64・OpenSSL 0.9.8・Windows Server 2008です。
- OpenSSLでルートCAを作成する。
- ADのグループポリシーにルートCAの証明書を追加する。
- 作成したルートCAで、リクエストを作成し、署名する。
- Windows Server 2008の証明書ストアに展開する。
- SSTPを構築する。
では、順を追って説明します。今回は、1.を説明します。ちなみに、OpenSSLでCA作成なので、Apache SSL・FTPSの証明書用にも利用できます。
※この作業には、CentOS 5.4が必要です。その他のディストリビューション・バージョンでも可能ですが、作業するディレクトリが異なる可能性があります。CentOS 5.4では、/etc/pki が関連ファイルのディレクトリでした。
あらかじめルートCAの証明書と秘密鍵の保管ディレクトリのパスを決めておきます。ここでは、/etc/pki/PublicCA とします。
CAの作成スクリプトがあるので、それをコピーします。CentOS 5.4では、/etc/pki/tls/misc/CA です。(コピーせずにそのまま利用することもできます。今後、複数のルートCAを作成したい場合は、コピーしてください。)
# cp /etc/pki/tls/misc/CA /etc/pki/PublicCA.sh
ここでは、/etc/pki/PublicCA.sh にコピーしました。
OpenSSLの設定ファイルもコピーしておきます。CentOS 5.4では、/etc/pki/tls/openssl.cnf です。(先ほど同様にコピーしなくても利用できます。複数のルートCAを作成する場合でもコピーする必然性はありませんが、デフォルト値が設定できるので、コピーする方が良いです。)
# cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-public.cnf
ここでは、/etc/pki/tls/openssl-public.cnf にコピーしました。
設定ファイルを編集します。変更箇所のみ記載します。
# vi /etc/pki/tls/openssl-public.cnf [ CA_default ] dir = ../../CA ↓ ルートCAの証明書の保管ディレクトリのパス dir = /etc/pki/PublicCA ※以下デフォルト指定(省略可能) [ req_distinguished_name ] countryName_default = GB ↓ 国名 countryName_default = JP stateOrProvinceName_default = Berkshire ↓都道府県名 stateOrProvinceName_default = Shiga localityName_default = Newbury ↓市町村名 localityName_default = Yasu 0.orgnizationName_default = My Company Ltd ↓団体名 0.orginzationName_default = Let\'s Try It!
以上で、設定ファイルを保存しておきます。
ルートCA作成スクリプトを編集します。CentOS 5.4についていた物は、少し不具合(勘違いかもしれませんが)あったので直しておきます。
# vi /etc/pki/PublicCA.sh ↓DAYS="-days 365"の上に追加 設定ファイルパスにする SSLEAY_CONFIG="-config /etc/pki/tls/openssl-public.cnf" CATOP=../../CA ↓ルートCAの証明書の保管ディレクトリのパス CATOP=/etc/pki/PublicCA ※92行目 不具合修正 $CA -out ${CATOP}/$CACERT $CADAYS -batch \ ↓ -extentions=v3_caを追加(これをしないと作成した証明書がCAとして動作しない) $CA -out ${CATOP}/$CACERT $CADAYS -extentions=v3_ca -batch \
編集を終了して保存しておきます。
ルートCAの証明書を作成します。作成したスクリプトを利用して行います。ちなみにここでは、説明していませんがCADAYSを3650にしています。
# /etc/pki/PublicCA.sh -newca CA certificate filename (or enter to create) ← Enterキーで応答 Making CA certificate ... Generating a 1024 bit RSA private key ........................................................................++++++ ...++++++ writing new private key to '/etc/pki/PublicCA/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) [JP]: ←デフォルト設定でEnterキーで応答 State or Province Name (full name) [Shiga]: ←デフォルト設定でEnterキーで応答 Locality Name (eg, city) [Yasu]: ←デフォルト設定でEnterキーで応答 Organization Name (eg, company) [Let's Try It!]: ←デフォルト設定でEnterキーで応答 Organizational Unit Name (eg, section) []:Let's Try It! Public CA ←部門を入力 Common Name (eg, your name or your server's hostname) []:Let's Try It! Public CA ←基本はホストのFQDN、CAは名前の方が良いかも? Email Address []:[email protected] ←電子メールアドレス 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 /etc/pki/tls/openssl-public.cnf Enter pass phrase for /etc/pki/PublicCA/private/./cakey.pem: ←秘密鍵のパスフレーズを入力 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 0 (0x0) Validity Not Before: Feb 9 10:25:56 2010 GMT Not After : Feb 7 10:25:56 2020 GMT Subject: countryName = JP stateOrProvinceName = Shiga organizationName = Let's Try It! organizationalUnitName = Let's Try It! Public CA commonName = Let's Try It! Public CA emailAddress = [email protected] X509v3 extensions: X509v3 Subject Key Identifier: A2:F2:EF:70:29:96:3F:87:FC:7B:E9:65:FD:38:B5:91:39:F5:C8:9C X509v3 Authority Key Identifier: keyid:A2:F2:EF:70:29:96:3F:87:FC:7B:E9:65:FD:38:B5:91:39:F5:C8:9C DirName:/C=JP/ST=Shiga/O=Let's Try It!/OU=Let's Try It! Public CA/CN=Let's Try It! Public CA/[email protected] serial:00 X509v3 Basic Constraints: CA:TRUE ←ここにこれが出ていることを確認しておく Certificate is to be certified until Feb 7 10:25:56 2020 GMT (3650 days) Write out database with 1 new entries Data Base Updated
これで、ルートCAの作成が完了しました。/etc/pki/PublicCAの中に証明書類が格納されています。
証明書を他のマシンに使えるようにPEM形式からDER形式のファイルにエクスポートしておきます。次回に必要です。
# openssl x509 -inform pem -in /etc/pki/PublicCA/cacert.pem -outform der -out /etc/pki/PublicCA/cacert.der
/etc/pki/PublicCA/cacert.derにエクスポートされます。USBメモリ・FTPなどを使ってコピーしておいてください。
今回はここまで。次回、グループポリシーで証明書の自動展開を設定して、さらにSSTP用の証明書を作成します。
長いな・・
コメントする