WebLogic9.2J でカスタムキーストアを使ってSSL通信を行うおぼえがきです。
使用した WebLogic は、下記のサイトからダウンロードしました。
日本BEAシステムズ株式会社 Evaluation Center
環境
使用した環境は以下のとおりです。
- Red Hat
- WebLogic Server 9.2J & MP
- OpenSSL
WebLogic と キーストア
キーストアとは
キーストアとは、暗号化に必要な鍵や証明書をエントリとして保管する箱です。それぞれのエントリをエイリアスをつけて管理します。キーストアを操作するツールに、Java の keytool があります。
WebLogic のキーストア
WebLogic は ID キーストアと信頼キーストアの2つのキーストアをセキュリティのために使い分けています。
ID キーストアは、主に秘密鍵を格納するのに使います。信頼キーストアはサーバ証明書を格納するのに使います。
秘密鍵は公開鍵暗号を行うサーバにとってとても重要なものになります。逆にサーバ証明書は複数のユーザで共有することができます。そのため、ID キーストアは root 権限での読み取りのみ、信頼キーストアは他からアクセス可能なパーミッションというような使い分けを行います。
WebLogic はデフォルトで「デモ ID とデモ信頼」という2つのキーストアを用意しています。
この2つのキーストアは $WL_HOME/server/lib
の下にあります。
- デモ ID キーストア
- DemoIdentity.jks
- デモ信頼キーストア
- DemoTrust.jks
デモ用のキーストアのパスワードはそれぞれ「DemoIdentityKeyStorePassPhrase」「DemoTrustKeyStorePassPhrase」に設定されています。
それぞれ、次のような秘密鍵エントリと証明書が入っています。
[weblogic@localhost]# > keytool -list -keystore DemoIdentity.jks -storepass DemoIdentityKeyStorePassPhrase キーストアのタイプ: jks キーストアのプロバイダ: SUN キーストアには 1 エントリが含まれます。 demoidentity, 2007/10/27, keyEntry, 証明書のフィンガープリント (MD5): 46:EA:6B:F9:D5:5D:CC:36:78:B3:E0:C1:41:30:CC:9E
[weblogic@localhost]# > keytool -list -keystore DemoTrust.jks -storepass DemoTrustKeyStorePassPhrase キーストアのタイプ: jks キーストアのプロバイダ: SUN キーストアには 4 エントリが含まれます。 certgenca, 2002/03/23, trustedCertEntry, 証明書のフィンガープリント (MD5): 8E:AB:55:50:A4:BC:06:F3:FE:C6:A9:72:1F:4F:D3:89 wlsdemocanew2, 2003/01/25, trustedCertEntry, 証明書のフィンガープリント (MD5): 5B:10:D5:3C:C8:53:ED:75:43:58:BF:D5:E5:96:1A:CF wlsdemocanew1, 2003/01/25, trustedCertEntry, 証明書のフィンガープリント (MD5): A1:17:A1:73:9B:70:21:B9:72:85:4D:83:01:69:C8:37 wlscertgencab, 2003/01/25, trustedCertEntry, 証明書のフィンガープリント (MD5): A2:18:4C:E0:1C:AB:82:A7:65:86:86:03:D0:B3:D8:FE
カスタムキーストアとサーバ証明書
WebLogic サーバを一般公開しSSL通信を行う場合、デモ証明書では不十分です。きちんとした CA 局(認証機関)が発行したサーバ証明書を使う必要があります。
そういうときには、カスタムキーストアを作成し、信頼できる CA 局が発行したサーバ証明書を保存し、利用する必要があります。
- オレオレ証明書
-
keytool でキーストアを作成すると秘密鍵と公開鍵のペアと公開鍵を自己署名証明書でサインした証明書が作成されます。いわゆるオレオレ証明書です。
オレオレ証明書では、ユーザにサーバを信頼してもらうことはできません。そのため、公開鍵を信頼されている CA 局の証明書でサインしてもらいます。
ブラウザにはあらかじめ信頼されている CA 局の証明書がインストールされています。ブラウザにインストールされていない CA 局の証明書でサインされているサーバの公開鍵は、警告が表示されますが、CA 局の証明書をブラウザに手動でインストールすれば警告はでなくなります。
カスタムキーストアをつくる
今回はオレオレ CA 局に OpenSSL で作成したものを使います。
キーストアを作成する
keytool を使ってキーストアを作成します。
[weblogic@localhost]# > keytool -genkey -alias myserver -keyalg RSA -keystore myKeystore.jks キーストアのパスワードを入力してください: weblogic 姓名を入力してください。 [Unknown]: myserver 組織単位名を入力してください。 [Unknown]: hamasyou 組織名を入力してください。 [Unknown]: hamasyou 都市名または地域名を入力してください。 [Unknown]: tokyo 州名または地方名を入力してください。 [Unknown]: tokyo この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: jp CN=myserver, OU=hamasyou, O=hamasyou, L=tokyo, ST=tokyo, C=jp でよろしいですか? [no]: yes <myserver> の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください): [Enter] [weblogic@localhost]# > ls myKeystore.jks
- 姓名の入力に注意
-
「姓名」のところには、サーバのホスト名を入力します。今回は myserver とつけました。この場合、クライアント(ブラウザ)からは https://myserver/ のようにアクセスします。
「姓名」で設定した値と、ホスト名が違うと、ブラウザには次のような警告が表示されます。
ホスト名ごとにサーバ証明書は作る必要があるので注意が必要です。
- -keysotre
指定されたキーストアが存在しない場合は新たにキーストアが作成されます。
- -alias
このキーストアに作成される秘密鍵と公開鍵のペアに名前(エイリアス)をつけます。キーのペアはこのエイリアスを用いてアクセスされます。
- -keyalg
-
暗号化アルゴリズムを指定します。指定しない場合は DSA になります。WebLogic Server 9.2J の試用版では DSA アルゴリズムはサポートされていないので、明示的に RSA を指定します。
サーバ証明書発行要求を作成する
キーストアを作っただけだと、自己署名によるサーバ証明書しかありません。CA 局にサーバ証明書を作ってもらうために、サーバ証明書発行要求をつくります。
[weblogic@localhost]# > keytool -certreq -alias myserver -keystore myKeystore.jks -file myserver_certreq.csr キーストアのパスワードを入力してください: weblogic [weblogic@localhost]# > ls myKeystore.jks myserver_certreq.csr
ここで作成したサーバ証明書発行要求は、CA 局がサーバ証明書をつくる元になります。
オレオレ CA 局を作成する
OpenSSL の CA 作成スクリプトを CA 局を作成します。自分の環境では openssl の CA 作成スクリプトは /usr/share/ssl/misc
にありました。
これを、適当なディレクトリにコピーして利用します。
[weblogic@localhost]# > ./CA -newca CA certificate filename (or enter to create) [Enter] Making CA certificate … Generating a 1024 bit RSA private key ……….++++++ ………………………++++++ writing new private key to ‘./demoCA/private/./cakey.pem’ Enter PEM pass phrase: weblogic Verifying - Enter PEM pass phrase: weblogic 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) [GB]:jp State or Province Name (full name) [Berkshire]:tokyo Locality Name (eg, city) [Newbury]:tokyo Organization Name (eg, company) [My Company Ltd]:hamasyou Organizational Unit Name (eg, section) []:hamasyou Common Name (eg, your name or your server’s hostname) []:oreoreca Email Address []:[email protected]
- Organization Name と 組織名に注意
-
CA の「Organization Name」とサーバの「組織名」(keytool -genkey で指定したもの)が違うと、エラーが発生します。
[weblogic@localhost]# > openssl ca -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -in myserver_certreq.csr -out myserver_cert.csr Using configuration from /usr/share/ssl/openssl.cnf Enter pass phrase for demoCA/private/cakey.pem: Check that the request matches the signature Signature ok The organizationName field needed to be the same in the CA certificate (hamasyou) and the request (xxxxx)
CA スクリプトを実行したディレクトリの配下に次のようなディレクトリが作成されているはずです。
[weblogic@localhost]# > tree demoCA demoCA/ |– cacert.pem |– certs |– crl |– index.txt |– newcerts |– private | `– cakey.pem `– serial
- demoCA/cacert.pem
このファイルが CA 局のサーバ証明書です。今回はオレオレCA 局なので、このサーバ証明書もキーストアに保存しなければなりません。
- demoCA/private/cakey.pem
CA 局の秘密鍵です。この CA 局からサーバ証明書を発行してもらうときに使います。
オレオレ CA 局にサーバ証明書を発行してもらう
今作った CA 局のサーバ証明書を使って、サーバ証明書を発行します。
[weblogic@localhost]# > openssl ca -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -in myserver_certreq.csr -out myserver_cert.csr Using configuration from /usr/share/ssl/openssl.cnf Enter pass phrase for demoCA/private/cakey.pem: weblogic Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Oct 27 12:11:19 2007 GMT Not After : Oct 26 12:11:19 2008 GMT Subject: countryName = jp stateOrProvinceName = tokyo organizationName = hamasyou organizationalUnitName = hamasyou commonName = myserver X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 16:2F:BB:44:06:C5:A1:20:8F:D1:70:0D:70:6B:07:54:D2:13:6B:9C X509v3 Authority Key Identifier: keyid:BE:04:55:2E:63:2E:37:FC:94:1B:D6:9D:09:96:78:7A:B1:BF:A9:F6 DirName:/C=jp/ST=tokyo/L=tokyo/O=hamasyou/OU=hamasyou /CN=oreoreca/[email protected] serial:00 Certificate is to be certified until Oct 26 12:11:19 2008 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [weblogic@localhost]# > ls -F CA* demoCA/ myKeystore.jks myserver_cert.csr myserver_certreq.csr
作成されたサーバ証明書を見てみると、証明データ以外にヘッダーがついています。キーストアに保存する際にはヘッダー部は不要なので削除します。
「—–BEGIN CERTIFICATE—–
」から「—–END CERTIFICATE—–
」までを残して、他は削除します。
編集前
[weblogic@localhost]# > cat myserver_cert.csr Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=jp, ST=tokyo, L=tokyo, O=hamasyou, OU=hamasyou, CN=oreoreca/[email protected] Validity Not Before: Oct 27 12:11:19 2007 GMT Not After : Oct 26 12:11:19 2008 GMT Subject: C=jp, ST=tokyo, O=hamasyou, OU=hamasyou, CN=myserver Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:9d:61:fa:c1:92:ab:74:a5:cd:ec:bc:01:55:eb: 6c:9d:67:92:b6:cf:1c:de:f0:65:ba:82:7f:8b:a4: 9d:d6:0a:17:41:69:7b:86:41:3e:aa:8b:47:80:0e: 8c:0a:89:30:04:75:d1:34:46:6d:21:97:46:db:0b: 11:2c:2f:15:b5:05:48:d0:a9:db:1f:1b:7a:40:6b: 4f:44:89:f7:ea:3b:ae:c8:3f:6b:1c:c2:fa:9d:74: 16:32:f8:25:95:b4:24:76:18:52:97:8b:0e:ba:77: a9:34:51:ae:89:4a:2e:1c:37:a8:78:73:8c:03:25: 4f:66:77:55:d5:6f:91:bd:a5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 16:2F:BB:44:06:C5:A1:20:8F:D1:70:0D:70:6B:07:54:D2:13:6B:9C X509v3 Authority Key Identifier: keyid:BE:04:55:2E:63:2E:37:FC:94:1B:D6:9D:09:96:78:7A:B1:BF:A9:F6 DirName:/C=jp/ST=tokyo/L=tokyo/O=hamasyou/OU=hamasyou /CN=oreoreca/[email protected] serial:00 Signature Algorithm: md5WithRSAEncryption 42:fb:ee:73:5b:03:e5:60:95:b6:eb:72:ac:bd:6a:c1:37:17: 8b:2f:e6:6b:d1:28:e8:73:2d:d6:1b:d9:cd:cb:34:93:5d:4c: dd:4d:5a:b3:89:47:9e:dc:81:ca:d4:d0:e1:79:68:2a:5a:d6: fe:30:25:56:e8:3c:b2:18:fc:65:35:e4:19:0c:94:67:36:59: 66:f4:ae:28:6b:66:7d:5a:be:50:0f:8a:cb:a3:72:af:3b:c7: v04:52:5e:c7:29:b0:79:3b:a6:4d:22:f7:5d:73:25:26:53:46: 94:b2:e6:d0:50:5f:37:00:f0:5b:fc:7b:3c:20:76:f7:37:c5: f6:a4 —–BEGIN CERTIFICATE—– MIIDbTCCAtagAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCanAx DjAMBgNVBAgTBXRva3lvMQ4wDAYDVQQHEwV0b2t5bzERMA8GA1UEChMIaGFtYXN5 b3UxETAPBgNVBAsTCGhhbWFzeW91MREwDwYDVQQDEwhvcmVvcmVjYTEhMB8GCSqG SIb3DQEJARYSeHh4eHhAaGFtYXN5b3UuY29tMB4XDTA3MTAyNzEyMTExOVoXDTA4 MTAyNjEyMTExOVowVjELMAkGA1UEBhMCanAxDjAMBgNVBAgTBXRva3lvMREwDwYD VQQKEwhoYW1hc3lvdTERMA8GA1UECxMIaGFtYXN5b3UxETAPBgNVBAMTCG15c2Vy dmVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdYfrBkqt0pc3svAFV62yd Z5K2zxze8GW6gn+LpJ3WChdBaXuGQT6qi0eADowKiTAEddE0Rm0hl0bbCxEsLxW1 BUjQqdsfG3pAa09EiffqO67IP2scwvqddBYy+CWVtCR2GFKXiw66d6k0Ua6JSi4c N6h4c4wDJU9md1XVb5G9pQIDAQABo4IBFTCCAREwCQYDVR0TBAIwADAsBglghkgB hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE FBYvu0QGxaEgj9FwDXBrB1TSE2ucMIG2BgNVHSMEga4wgauAFL4EVS5jLjf8lBvW nQmWeHqxv6n2oYGPpIGMMIGJMQswCQYDVQQGEwJqcDEOMAwGA1UECBMFdG9reW8x DjAMBgNVBAcTBXRva3lvMREwDwYDVQQKEwhoYW1hc3lvdTERMA8GA1UECxMIaGFt YXN5b3UxETAPBgNVBAMTCG9yZW9yZWNhMSEwHwYJKoZIhvcNAQkBFhJ4eHh4eEBo YW1hc3lvdS5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAQvvuc1sD5WCVtutyrL1q wTcXiy/ma9Eo6HMt1hvZzcs0k11M3U1as4lHntyBytTQ4XloKlrW/jAlVug8shj8 ZTXkGQyUZzZZZvSuKGtmfVq+UA+Ky6NyrzvHBFJexymweTumTSL3XXMlJlNGlLLm 0FBfNwDwW/x7PCB29zfF9qQ= —–END CERTIFICATE—–
編集後
[weblogic@localhost]# > cat myserver_cert_after.csr —–BEGIN CERTIFICATE—– MIIDbTCCAtagAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCanAx DjAMBgNVBAgTBXRva3lvMQ4wDAYDVQQHEwV0b2t5bzERMA8GA1UEChMIaGFtYXN5 b3UxETAPBgNVBAsTCGhhbWFzeW91MREwDwYDVQQDEwhvcmVvcmVjYTEhMB8GCSqG SIb3DQEJARYSeHh4eHhAaGFtYXN5b3UuY29tMB4XDTA3MTAyNzEyMTExOVoXDTA4 MTAyNjEyMTExOVowVjELMAkGA1UEBhMCanAxDjAMBgNVBAgTBXRva3lvMREwDwYD VQQKEwhoYW1hc3lvdTERMA8GA1UECxMIaGFtYXN5b3UxETAPBgNVBAMTCG15c2Vy dmVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdYfrBkqt0pc3svAFV62yd Z5K2zxze8GW6gn+LpJ3WChdBaXuGQT6qi0eADowKiTAEddE0Rm0hl0bbCxEsLxW1 BUjQqdsfG3pAa09EiffqO67IP2scwvqddBYy+CWVtCR2GFKXiw66d6k0Ua6JSi4c N6h4c4wDJU9md1XVb5G9pQIDAQABo4IBFTCCAREwCQYDVR0TBAIwADAsBglghkgB hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE FBYvu0QGxaEgj9FwDXBrB1TSE2ucMIG2BgNVHSMEga4wgauAFL4EVS5jLjf8lBvW nQmWeHqxv6n2oYGPpIGMMIGJMQswCQYDVQQGEwJqcDEOMAwGA1UECBMFdG9reW8x DjAMBgNVBAcTBXRva3lvMREwDwYDVQQKEwhoYW1hc3lvdTERMA8GA1UECxMIaGFt YXN5b3UxETAPBgNVBAMTCG9yZW9yZWNhMSEwHwYJKoZIhvcNAQkBFhJ4eHh4eEBo YW1hc3lvdS5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAQvvuc1sD5WCVtutyrL1q wTcXiy/ma9Eo6HMt1hvZzcs0k11M3U1as4lHntyBytTQ4XloKlrW/jAlVug8shj8 ZTXkGQyUZzZZZvSuKGtmfVq+UA+Ky6NyrzvHBFJexymweTumTSL3XXMlJlNGlLLm 0FBfNwDwW/x7PCB29zfF9qQ= —–END CERTIFICATE—–
オレオレ CA 局サーバ証明書をキーストアに保存する
サーバ証明書を発行した CA 局のサーバ証明書をキーストアに保存します。キーストアにサーバ証明書にサインした CA のサーバ証明書がない場合にはエラーになります。
[weblogic@localhost]# > keytool -import -noprompt -trustcacerts -alias oreoreca -file demoCA/cacert.pem -keystore myKeystore.jks -storepass weblogic 証明書がキーストアに追加されました。
- 証明書の登録順に注意
-
CA 局のサーバ証明書を先にキーストアに保存していない場合、証明連鎖できずにエラーになります。
[weblogic@localhost]# > keytool -import -noprompt -alias myserver -file myserver_cert_after.csr -keystore myKeystore.jks -storepass weblogic keytool エラー: java.lang.Exception: 応答から連鎖を確立できませんでした。
サーバ証明書をキーストアに保存する
CA 局に発行されたサーバ証明書を保存します。このとき、最初に keytool -genkey で指定したエイリアスと同じ値を指定した場合は証明連鎖(CA 局と自己署名)になります。
[weblogic@localhost]# > keytool -import -noprompt -alias myserver -file myserver_cert_after.csr -keystore myKeystore.jks -storepass weblogic 証明書応答がキーストアにインストールされました。
- 証明書のエイリアスに注意
-
最初に keytool -genkey で作成したときのエイリアスと別のエイリアスでサーバ証明書を保存した場合、CA 局による署名が使われず自己署名が使われます。
WebLogic でカスタムキーストアを設定する
WebLogic のカスタムキーストアの設定
WebLogic に先ほど作成したキーストアを設定します。WebLogic の管理サーバの管理画面を開き、[サーバ]-[コンフィグレーション]-[キーストア]を開きます。
キーストアに「カスタム ID とカスタム信頼」を選択します。
今回は、秘密鍵、サーバ証明書ともに同じキーストアに入れているので、両方とも同じ設定を行います。
WebLogic の SSL の設定
WebLogic の SSL の設定を行います。WebLogic の管理サーバの管理画面を開き、[サーバ]-[コンフィグレーション]-[SSL]を開きます。
ID キーストアに指定したキーストアの中から秘密鍵エントリのエントリを指定します。
- 公開鍵暗号アルゴリズムに注意
-
WebLogic Server 9.2J MP2 の試用版では、公開鍵暗号に DSA はサポートされていません。秘密鍵は keytool -genkey の -keyalg で RSA を指定したものを指定します。
クライアント(ブラウザ)に CA 局の証明書をインストールする
ブラウザで WebLogic サーバにアクセスすると、今回作成した SSL 証明書が使われるわけですが、次のような警告が出ると思います。
「このセキュリティ証明書は、信頼する会社から発行されていません。証明書を表示して、この証明機関を信頼するかどうかを決定してください。」
今回、オレオレ CA 局を作りましたが、この CA 局の CA 証明書はクライアント(ブラウザ)に信頼されていません。
参考
今回作った CA 局を証明機関として正しくクライアントに認識してもらうために、CA局の証明書をクライアント(ブラウザ)にインストールします。
CA 局のサーバ証明書をブラウザにインポートする
CA 局のサーバ証明書は demoCA/cacert.pem
になります。これをブラウザにインストールします。
ブラウザの [ツール]-[インターネット オプション] の [コンテンツ] タブにある [証明書…] を開きます。
[信頼されたルート証明機関] タブを開き、[インポート(I)…] を開きます。
[参照…] を選択して [ファイルの種類] を「すべて」にし、CA 局のサーバ証明書を選択します。
証明書のストア場所を、「信頼されたルート証明機関」を選択します。
「はい」を選択すると、CA 局の証明書が「ルート証明機関」として認識されるようになります。
CA 局のサーバ証明書は安全な方法(改ざんされない方法)で取得する必要があります。また、本当に信頼する CA 局のサーバ証明書のみをクライアントにはインストールするようにします。
良くわからない CA 局のサーバ証明書はインストールしてはいけません。