3.Javaによる 電子署名の検証
3.1 概要
電子署名されたデータの検証方法を説明します。ここで取り扱う電子署名は、RFC3852で既定されたCryptgraphic Message Syntax(CMS)とします。
Windows環境に格納された電子証明書を利用できるJNIを用意いたしました。これを利用すれば、Windows環境とJava環境にそれぞれに電子証明書を格納する必要がなくなります。
Windows環境に格納された電子証明書を利用できるJNIを用意いたしました。これを利用すれば、Windows環境とJava環境にそれぞれに電子証明書を格納する必要がなくなります。
3.2 電子署名されたデータ
署名を検証するにあたって、電子署名されたデータを別途用意してください。ここでは、そのデータを検証し、署名された電子証明書を取り出します。
Windowsでの電子証明の方法は、電子署名の実装で説明しています。
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で取り出して検証します。
CartificateFactoryからCertPath(証明書パス)を生成します。
CertificateFactoryには、証明書の形式である、「X.509」を指定します。
CertPathの場合は、署名データの形式である、「PKCS7」を指定します。
このインスタンスには複数の電子証明書が含まれているばあいがありますので、Listクラスを利用して取り出します。
このようにして取り出した電子証明書の公開鍵を使って署名データの電子署名を検証し、また、その電子証明書自体も検証しなければなりません。
電子証明書の検証では、Java環境での検証手段は実装されていますが、Windows環境にある電子証明書を使った検証の方法が実装されていません。そこで、次の項目では、Windowsの証明書ストアに格納されたルート証明書をJavaで取り出して検証します。
ご質問・ご要望
ご質問やご要望は、こちらからお送りください。(匿名でも可能です。)
(記載の会社名および製品名は、各社の登録商標および商標です。)