RSA 署名付き証明書を使用したアプレットの署名方法


この章では以下について説明します。

はじめに

RSA 署名付きアプレットは、署名付きアプレットを容易に配備するためにサポートされています。ただし、RSA を介してアプレットに署名することは、アプレット開発の初心者の大半にとって依然として難しい作業であり、Java Plug-in の機能を十分に利用する上での障害となっています。このドキュメントでは、RSA 証明書を使用してアプレットに署名を行う手順を、順を追って説明します。アプレット開発の初心者は、この手順に従うことにより、多数の複雑なセキュリティ関連の問題に悩まされずに、アプレットに署名が行えるようになります。

アプレットに署名を行うには、以下が必要です。

  1. 署名ツール
  2. 公開鍵の RSA 鍵ペアおよび証明連鎖
  3. JAR ファイルとしてバンドルされたアプレットおよびすべてのクラスファイル

署名ツール

アプレットの RSA 署名用に、2 つのタイプの署名ツールが、現在 Java Plug-in でサポートされています。

  1. Jarsigner — Java 2 SDK の一部として提供されているツール。コマンドは、jarsigner ... です。
  2. Netscape Signing Tool — Navigator/Communicator でアプレットに署名を行うための、Netscape により提供されるツール。署名ツールの最新バージョンは、http://developer.netscape.com/software/signedobj/jarpack.html からダウンロードできます(Netscape は、以前のバージョンの署名ツールのダウンロードサービスは提供していません)。コマンドは、signtool ... です。

RSA 証明書の取得

RSA 証明書は、VeriSignThawte など、RSA をサポートする証明書発行局 (CA) から購入できます。VeriSign などのいくつかの CA は、使用中の特定の署名ツールに基づき、別のプロトコルを証明書発行用に実装します。

Jarsigner を使用した証明書の取得

Jarsigner は、VeriSign や Thawte 証明書で動作することが知られており、証明書発行局に対しても動作可能です。Jarsigner を使用して、RSA 証明書を使用するアプレットに署名するには、VeriSign から Sun Java Signing 証明書を取得するか、Thawte から Java Code Signing 証明書を取得します。また、他の CA から類似の証明書を取得することもできます。証明書の登録処理中に、証明書署名要求 (CSR) を提出するよう求められます。CSR を生成するには、次の手順を実行します。

  1. keytool を使用して、RSA 鍵ペアを生成します (「-genkey -keyalg rsa」オプションを指定)。識別名に、VeriSign または Thawte で規定されたすべてのコンポーネントが含まれることを確認してください。次に例を示します。
    C:\>C:\jdk1.3\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]: Java Software
    What is the name of your organization?
    [Unknown]: Sun Microsystems
    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=Java Software, O=Sun Microsystems,
                    L=Cupertino, ST=CA, C=US> correct?
    [no]: yes
    
    Enter key password for <MyCert>
    (RETURN if same as keystore password): *********
    
  2. keytool -certreq」を使用して、証明書署名要求を生成します。結果を VeriSign または Thawte の Web フォームにコピー&ペーストします。次に例を示します。 
    C:\>C:\jdk1.3\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-----
    
  3. 証明書応答 (連鎖) が、CA (たとえば VeriSign や Thawte) から電子メールで送付されます。連鎖をコピーし、ファイルに保存します。「keytool -import」を使用して、連鎖をキーストア内にインポートします。次に例を示します。
    C:\>C:\jdk1.3\bin\keytool -import -alias MyCert -file VSSStanleyNew.cer 
    
  4. RSA 証明書およびサポートする連鎖の確認、およびキーストアへのインポートが行われます。これで、jarsigner を使用して JAR ファイルに署名する準備が整いました。

注:

上記の手順すべてで同じ別名を使用するか、別名を使用しないようにしてください。別名を使用しない場合、デフォルトの「mykey」が別名になります。

Netscape Signing Tool を使用した証明書の取得

大半の CA (VeriSign や Thawte など) は、Netscape Signing Tool をサポートしています。Netscape Signing Tool を使用して、RSA 証明書を使用するアプレットに署名するには、VeriSign から Netscape Object Signing 証明書を取得するか、Thawte から Netscape Object Signing 証明書を取得します。また、他の CA から類似の証明書を取得することもできます。登録処理中に、個人または会社情報の入力が求められます。これは、CA は、識別情報を検証してから証明書を発行する必要があるためです。この処理には、数時間から数日かかる場合があります。

RSA 証明書の発行後、証明書は次の 3 つのファイルで構成されます。

CA によっては、発行した証明書をフロッピーディスクに格納したり、Netscape Navigator/Communicator のセキュリティモジュール内に直接格納することも可能です。証明書を入手後に、Netscape Signing Tool を使用して JAR ファイルに署名できます。

Java アプレットを JAR ファイルとしてバンドルする

Jarsigner を使用して、RSA 証明書を使用するアプレットに署名する場合、アプレットを JAR ファイルとしてバンドルする必要があります。Java 2 SDK に同梱された Jar ツール (コマンド jar ...) を、この目的で使用できます。次に例を示します。

C:>C:\jdk1.3\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:>C:\jdk1.3\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 ファイル内に適切なパスを保持して格納されていることを確認できます。

Netscape Signing Tool を使用して RSA 証明書を保持するアプレットに署名するには、アプレットを C:\signdir などのディレクトリ内に配置する必要があります。署名処理の完了後に、Netscape Signing Tool はアプレットを JAR ファイルとしてバンドルします。

Java アプレットの署名

RSA 証明書、署名ツール、およびアプレットの JAR ファイルを取得できたら、アプレットに署名を行うことができます。

jarsigner を使用したアプレットの署名

jarsigner を使用してアプレットに署名するには、次の手順を実行します。

  1. jarsigner を使用して、JAR ファイルに署名します。その際、前の手順で生成されたキーストアの RSA 証明書を使用します。指定された別名が同じであることを確認してください。次に例を示します。
    C:\>C:\jdk1.3\bin\jarsigner C:\TestApplet.jar MyCert
    Enter Passphrase for keystore: ********
    
  2. jarsigner -verify -verbose -certs」を使用して、JAR ファイルの検証を行います。
    C:>C:\jdk1.3\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=Java Software, 
                    O=Sun Microsystems, L=Cupertino, 
                    ST=CA, C=US (mycert)
          X.509, CN=Sun Microsystems, OU=Java Plug-in QA, 
                    O=Sun Microsystems, 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.
  3. アプレットの署名が適正に行われました。これで、RSA 署名付きアプレットを配備できます。

Netscape Signing tool を使用したアプレットの署名

signtool を使用してアプレットに署名するには、次の手順を実行します。

  1. signtool -L」を使用して、署名に使用する証明書のニックネームを決定します。次に例を示します。
    C:\signtool13WINNT40\signtool -L -d a:\cert
    using certificate directory: a:\cert
    
    S Certificates
    - ------------
      AT&T Certificate Services
      Thawte Personal Premium CA
      GTE CyberTrust Secure Server CA
      Verisign/RSA Commercial CA
      AT&T Directory Services
      BelSign Secure Server CA
      BelSign Class 1 CA
      GTIS/PWGSC, Canada Gov. Web CA
      Thawte Personal Freemail CA
      Thawte Server CA
      GTIS/PWGSC, Canada Gov. Secure CA
      MCI Mall CA
      VeriSign Class 3 Primary CA
      VeriSign Class 4 Primary CA
      KEYWITNESS, Canada CA
      BelSign Class 2 CA
      BelSign Object Publishing CA
    * Sun Microsystems, Inc.
      VeriSign Class 3 CA - Commercial Content/Software 
                            Publisher - VeriSign, Inc.
      Verisign/RSA Secure Server CA
      VeriSign Class 1 Primary CA
      BBN Certificate Services CA Root 1
      Thawte Personal Basic CA
    * Sun Microsystems, Inc.'s VeriSign, Inc. ID
      CertiSign BR
      VeriSign Class 2 Primary CA
      Canada Post Corporation CA
      Integrion CA
      IBM World Registry CA
      BelSign Class 3 CA
      Uptime Group Plc. Class 1 CA
      Uptime Group Plc. Class 2 CA
      Thawte Premium Server CA
      Uptime Group Plc. Class 3 CA
      GTE CyberTrust Root CA
      Uptime Group Plc. Class 4 CA
    - ------------
    
    Certificates that can be used to sign objects 
    have *'s to their left.
        
  2. 空のディレクトリを作成します。次に例を示します。
    mkdir signdir
  3. アプレットのクラスファイルをすべて、このディレクトリ内に配置します。

  4. signtool -Z」を使用して、アプレットに署名します。次に例を示します。
    C:\signtool13>signtool -k "Sun Microsystems, Inc.'s VeriSign, Inc. ID" 
            -d a:\cert -Z c:\TestApplet.jar c:\signdir
    using certificate directory: a:\cert
    Generating c:\signdir/META-INF/manifest.mf file..
    --> TestApplet.class
    adding c:\signdir/TestApplet.class to c:\TestApplet.jar...
            (deflated 57%)
    --> TestHelper.class
    adding c:\signdir/TestHelper.class to c:\TestApplet.jar...
            (deflated 43%)
    Generating zigbert.sf file..
    adding c:\signdir/META-INF/manifest.mf to c:\TestApplet.jar...
            (deflated 44%)
    adding c:\signdir/META-INF/zigbert.sf to c:\TestApplet.jar...
            (deflated 46%)
    adding c:\signdir/META-INF/zigbert.rsa to c:\TestApplet.jar...
            (deflated 40%)
    tree "c:\signdir" signed successfully
      
  5. signtool -w」を使用して、アーカイブを検証します。次に例を示します。
    C:\signtool13>signtool -w c:\TestApplet.jar -d a:\cert
    using certificate directory: a:\cert
    
    Signer information:
    
    nickname: Sun Microsystems, Inc.'s VeriSign, Inc. ID
    subject name: C=US, ST=CA, L=Palo Alto, OU=Java Software, 
            CN=Sun Microsystems, OU=Digital ID Class 3 - Netscape
    Object Signing, OU="www.verisign.com/repository/RPA Incorp. 
            by Ref.,LIAB.LTD(c)99", OU=VeriSign Trust Network, 
            O="VeriSign, Inc."
    issuer name: CN=VeriSign Class 3 CA - Commercial Content/Software 
            Publisher, OU="www.verisign.com/repository/RPA Incorp. 
            by Ref.,LIAB.LTD(c)98", OU=VeriSign Trust Network, 
            O="VeriSign, Inc."
    

アプレットの署名が適正に行われました。これで、RSA 署名付きアプレットを配備できます。配備に関する情報は、「RSA 署名付きアプレットの配備方法」を参照してください。

以前の Netscape 署名付きアプレットの変換

既存の Netscape 用 RSA 署名付きアプレットは、Netscape 固有のセキュリティ API を使用することがあります。Java Plug-in は、これらの Netscape 固有 API をサポートしません。その代わり、Plug-in は標準 Java セキュリティ API を、Netscape Navigator と Internet Explorer の両方でサポートします。

Netscape セキュリティ API を使用する Netscape 署名付きアプレットを Java Plug-in で動作させるには、次の操作を実行します。

  1. Java アプレット内の netscape.security.* 関連の文をすべてコメントにするか、削除します。
  2. アプレットを JAR ファイルとしてコンパイルし、アーカイブを作成します。
  3. Object Signing を使用して、JAR ファイルに再度署名を行います。

これにより、Netscape Navigator と Internet Explorer のどちらを使用する場合でも、RSA 署名付きアプレットが Java Plug-in で動作することが保証されます。

Microsoft Authenticode

Authenticode は、IE の JVM で署名付きアプレットをサポートするために、Win32 上の Microsoft Internet Explorer で使用される独自の署名技術です。Java Plug-in は Authenticode をサポートしません。その代わり、Java Plug-in は、IE と Netscape の両方で RSA 署名付きアプレットの使用をサポートします。

一般的な問題