このトピックでは、Webページに埋め込まれたりブラウザから起動されるJavaおよびJavaFXアプリケーションである、Rich Internet Application (RIA)の署名に使用される証明書の使用に関する情報を提供します。
この節の内容は以下のとおりです。
Java SEには、「コード・ソース」および「保護ドメイン」に基づく詳細なアクセス制御があります。JARファイルからロードされる各クラスは、コード・ソースを保持します。コード・ソースには、次の情報がカプセル化されます。
クラスの呼出し元の位置(URL)。さらに、クラス・ローダーによりロードされる各クラスは、コード・ソース(つまり、クラスの出所および署名者)に基づき、1つの保護ドメインにのみ所属します。各保護ドメインは、構成済みのセキュリティ・ポリシーに基づき、関連付けられたアクセス権のセットを保持します。次に、コード・ソースとそれに付与されるアクセス権をカプセル化します。
証明書に署名した主体のリスト。コード・ソース内の各署名者の主体は、X.509公開鍵証明書およびサポートする証明書チェーンにより表されます。
証明書チェーンは、階層的に順序付けられた公開鍵証明書のリストです。これは、署名者の公開鍵証明書で始まり、ルート証明書発行局(ルートCA)で終わります。チェーン内のある証明書の公開鍵は、チェーン内の前の証明書に含まれる署名の検証に使用されます。ルートCAの証明書は、自己署名証明書です。ルートCAはよく知られており広く公開されているので信頼性が高いものとされています。
デプロイメント・クラス・ローダーは、構成済のセキュリティ・ポリシーをチェックして、指定されたコード・ソースに付与する権限を決定します。次に、コード・ソースとそれに付与されるアクセス権が保護ドメインを形成します。この動作は、セキュリティ保護されたクラス・ローダー(java.security.SecureClassLoader
のインスタンス)のすべてに共通です。
証明書チェーンをルートCA証明書まで検証可能な場合、そのルートCA証明書がチェックされ、信頼できるルートCA証明書のデータベースに含まれていることを確認します。ルートCA証明書がデータベースに含まれる場合、認証された署名者の証明書チェーンが表示され、ユーザーは、その主体により署名されたコードにAllPermission
を付与するよう求められます。AllPermission
アクセス権を割り当てられたJavaコードはシステム・コードと同様に扱われ、システム・コードが保持するすべての特権を保持します。次に、ユーザーは、主体により署名されたコードにAllPermission
を付与するかどうか、および主体により署名されたコードにその権限を付与する場合は以降のセッションすべてに適用するかそれとも現行のセッションのみに限定するかを選択できます。
署名付きRIAは、RIAを容易にデプロイするためにサポートされています。この項では、信頼できる認証局(CA)からの証明書を使用してRIAに署名する手順を順を追って説明し、これにより、開発の初心者は、多数の複雑なセキュリティ関連の問題に悩まされずに、RIAに署名できるようになります。
アプレットに署名するには、次の項目が必要です。
署名ツール
公開鍵の鍵ペアおよび証明書チェーン
JARファイルとしてバンドルされたRIAおよびそのすべてのクラス・ファイル
証明書は、VeriSignやThawteなどのCAから購入できます。VeriSignなどのいくつかのCAは、使用中の特定の署名ツールに基づき、別のプロトコルを証明書発行用に実装します。
Jarsignerは、VeriSignやThawte証明書で動作することが知られており、認証局でも動作可能です。Jarsignerを使用してRIAに署名するには、VeriSignまたはThawteからJava用のコード署名証明書を取得するか、他のCAから類似の証明書を取得します。証明書の登録処理中に、証明書署名要求(CSR)を提出するよう求められます。CSRを生成するには、次の手順を実行します。
keytool
を使用して、RSA鍵ペアを生成します(「-genkey -keyalg rsa
」オプションを指定)。識別名に、VeriSignまたはThawteで規定されたすべてのコンポーネントが含まれることを確認してください。次に例を示します。
C:\Program Files\Java\jdk1.8.0\bin\keytool -genkey -keyalg rsa -alias MyCert Enter keystore password: ********* What is your first and last name? [Unknown]: XXXXXXX YYY What is the name of your organizational unit? [Unknown]: Example Software What is the name of your organization? [Unknown]: New Technology Company What is the name of your City or Locality? [Unknown]: Cupertino What is the name of your State or Province? [Unknown]: CA What is the two-letter country code for this unit? [Unknown]: US Is <CN=XXXXXXX YYY, OU=Example Software, O=New Technology Company, L=Cupertino, ST=CA, C=US> correct? [no]: yes Enter key password for <MyCert> (RETURN if same as keystore password): *********
「keytool -certreq
」を使用して、証明書署名要求を生成します。結果をVeriSignまたはThawteのWebフォームにコピーおよびペーストします。次に例を示します。
C:\Program Files\Java\jdk1.8.0\bin\keytool -certreq -alias MyCert Enter keystore password: ********* -----BEGIN NEW CERTIFICATE REQUEST----- MIIBtjCCAR8CAQAwdjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRIwE AYDVQQHEwlDdXBlcnRpbm8xGTAXBgNVBAoTEFN1biBNaWNyb3N5c3RlbX MxFjAUBgNVBAsTDUphdmEgU29mdHdhcmUxEzARBgNVBAMTClN0YW5sZXk gSG8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALTgU8PovA4y59eb oPjY65BwCSc/zPqtOZKJlaW4WP+UhmebE+T2Mho7P5zXjGf7elo3tV5uI 3vzgGfnhgpf73EoMow8EJhly4w/YsXKqeJEqqvNogzAD+qUv7Ld6dLOv0 CO5qvpmBAO6mfaI1XAgx/4xU/6009jVQe0TgIoocB5AgMBAAGgADANBgk qhkiG9w0BAQQFAAOBgQAWmLrkifKiUYtd4ykhBtPWSwW/IKkgyfIuNMML dF1DH8neSnXf3ZLI32f2yXvs7u3/xn6chnTXh4HYCJoGYOAbB3WNbAoQR i6u6TLLOvgv9pMNUo6v1qB0xly1faizjimVYBwLhOenkA3Bw7S8UIVfdv 84cO9dFUGcr/Pfrl3GtQ== -----END NEW CERTIFICATE REQUEST-----
CAにより、証明書応答チェーンが電子メールで送信されます。チェーンをコピーし、ファイルに保存します。keytool -import
を使用して、チェーンをキーストア内にインポートします。次に例を示します。
C:\Program Files\Java\jdk1.6.0\bin\keytool -import -alias MyCert -file VSSStanleyNew.cer
証明書およびサポートするチェーンの検証、およびキーストアへのインポートが行われます。これで、jarsigner
を使用してJARファイルに署名する準備が整いました。
注意: 前述の手順のすべてで同じ別名を使用するか、別名を使用しないようにしてください。別名を使用しない場合、デフォルトの「mykey」が別名になります。 |
Jarsignerを使用してRIAに署名する場合、RIAをJARファイルとしてバンドルする必要があります。Java SE SDKに同梱されたJarツール(コマンドjar ...
)を、この目的で使用できます。次に例を示します。
C:\Program Files\Java\jdk1.8.0\bin\jar cvf C:\TestApplet.jar . added manifest adding: TestApplet.class (in = 94208) (out= 20103)(deflated 78%) adding: TestHelper.class (in = 16384) (out= 779)(deflated 95%)
この例では、現在のディレクトリおよびそのサブディレクトリ内のファイルがすべて含まれるJARファイルC:\TestApplet.jar
が作成されます。
JARファイルの作成後に、jar
ツールを再度使用してその内容を検証します。次に例を示します。
C:\Program Files\Java\jdk1.8.0\bin\jar tvf TestApplet.jar 0 Mon Mar 06 18:02:54 PST 2000 META-INF/ 68 Mon Mar 06 18:02:54 PST 2000 META-INF/MANIFEST.MF 94208 Wed Mar 10 11:48:52 PST 2000 TestApplet.class 16384 Wed Mar 10 11:48:52 PST 2000 TestHelper.class
これにより、クラス・ファイルが確実に適切なパスでJARファイル内に格納されます。
証明書、署名ツール、およびRIAのJARファイルがある場合、RIAに署名する準備ができています。
jarsigner
を使用してアプレットに署名するには、次の手順を実行します。
jarsigner
を使用して、JARファイルに署名します。その際、前の手順で生成されたキーストアの証明書を使用します。指定された別名が同じであることを確認してください。次に例を示します。
C:\Program Files\Java\jdk1.8.0\bin\jarsigner C:\TestApplet.jar MyCert Enter Passphrase for keystore: ********
jarsigner -verify -verbose -certs
を使用して、JARファイルを検証します。
C:\Program Files\Java\jdk1.8.0\bin\jarsigner -verify -verbose -certs d:\TestApplet.jar 245 Wed Mar 10 11:48:52 PST 2000 META-INF/manifest.mf 187 Wed Mar 10 11:48:52 PST 2000 META-INF/MYCERT.SF 968 Wed Mar 10 11:48:52 PST 2000 META-INF/MYCERT.RSA smk 943 Wed Mar 10 11:48:52 PST 2000 TestApplet.class smk 163 Wed Mar 10 11:48:52 PST 2000 TestHelper.class X.509, CN=XXXXXXX YYY, OU=Example Software, O=New Technology Company, L=Cupertino, ST=CA, C=US (mycert) X.509, CN=New Technology Company, OU=Java Plug-in QA, O=New Technology Company, L=Cupertino, ST=CA, C=US X.509, EmailAddress=server-certs@thawte.com, CN=Thawte Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified.
RIAの署名が適正に行われました。これで、署名付きRIAをデプロイする準備ができました。
RIAをデプロイするには、次の手順に従います。
archive
、cache_archive
、またはcache_archive_ex
形式を使用して、HTMLページからJARファイルを参照します。
JARファイルおよびHTMLページをWebサーバー上に配置します。
RIAが起動すると、次の項目が検証されます。
RIAが正しく署名されていること。
証明書チェーンおよびルートCAが有効であること。
RIAが正しく署名されており、証明書チェーンおよびルートCAが有効な場合は、ユーザーにRIAの受入れまたはブロックを行うよう求めるセキュリティ・ダイアログが表示されます。詳細は、23.5項「セキュリティ・ダイアログ」を参照してください。
ユーザーがRIAの実行を許可するよう選択すると、対応するセキュリティ・コンテキスト内でRIAが実行されます。