3.Javaによる 電子署名の検証

3.1 概要

 電子署名されたデータの検証方法を説明します。ここで取り扱う電子署名は、RFC3852で既定されたCryptgraphic Message Syntax(CMS)とします。
 Windows環境に格納された電子証明書を利用できるJNIを用意いたしました。これを利用すれば、Windows環境とJava環境にそれぞれに電子証明書を格納する必要がなくなります。

3.2 電子署名されたデータ

 署名を検証するにあたって、電子署名されたデータを別途用意してください。ここでは、そのデータを検証し、署名された電子証明書を取り出します。
 Windowsでの電子証明の方法は、電子署名の実装で説明しています。

3.3 署名されたデータから電子証明書を取り出す

 電子署名されたデータ(CMS形式、RFC3852を参照してください)から、含まれているすべての証明書を取り出す方法を記します。
import java.io.*;
import java.util.*;
import java.security.cert.CertPath;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

public class PKCS7test {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("sign.p7s");
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            CertPath cp = cf.generateCertPath(fis, "PKCS7");
            List certs = cp.getCertificates();
            Iterator i = certs.iterator();
            System.out.println("証明書数 = " + certs.size());
            while (i.hasNext()) {
                X509Certificate cert = (X509Certificate)i.next();
                System.out.println(cert);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
            System.out.println("OK");
        }
}
署名されたデータは、「sign.p7s」というファイル名で格納されているものとします。
CartificateFactoryからCertPath(証明書パス)を生成します。

CertificateFactoryには、証明書の形式である、「X.509」を指定します。
CertPathの場合は、署名データの形式である、「PKCS7」を指定します。

このインスタンスには複数の電子証明書が含まれているばあいがありますので、Listクラスを利用して取り出します。
このようにして取り出した電子証明書の公開鍵を使って署名データの電子署名を検証し、また、その電子証明書自体も検証しなければなりません。
電子証明書の検証では、Java環境での検証手段は実装されていますが、Windows環境にある電子証明書を使った検証の方法が実装されていません。そこで、次の項目では、Windowsの証明書ストアに格納されたルート証明書をJavaで取り出して検証します。

 ご質問・ご要望

 ご質問やご要望は、こちらからお送りください。(匿名でも可能です。)

(記載の会社名および製品名は、各社の登録商標および商標です。)

PDF-Tools
PDFおよびPDF/Aを作成・編集などができるJavaで使えるライブラリ
128ビットの暗号化や電子署名に対応
http:
//www.trustss.co.jp/pdf/
Java 暗号化
1. Java暗号化拡張機能による暗号
1.2 共通鍵方式(秘密鍵)での暗号化
1.3 Java暗号とWindows暗号の連携
1.4 JCE 暗号を無制限強度にする
3. Javaによる 電子署名の検証
3.1 概要
3.2 電子署名されたデータ
3.3 署名されたデータから電子証明書を取り出す
3.4 Windows証明書ストアから、ルート証明書を取り出す
3.5 DLLおよびサンプルコード
1. Java暗号化拡張機能による暗号
1.1 概要
1.2 共通鍵方式(秘密鍵)での暗号化
1.2.1 暗号化と復号 (自動生成鍵による)
1.2.2 暗号鍵を指定して暗号化する
1.2.3 パスワードなどから暗号鍵を生成する
1.2.4 パスワードベース暗号化(PBE)方式
 
1.3 Java暗号とWindows暗号の連携
1.3.1 概要
1.3.2 Javaで暗号化する
1.3.3 Windows APIで復号する
1.3.4 Windowsで暗号化する
1.3.5 Javaで復号する
 
1.4 JCE 暗号を無制限強度にする
参考
Windows CryptoAPIによる暗号化
Windowsの新しい暗号化API
XML文書の暗号化
XML文書への電子署名(Java)
XML文書への電子署名(C#)
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。
会員用ログイン
ID:
パスワード:
ログインすると、一般公開していないページを閲覧できます。