私はデジタル署名されたXML文書を持っています。 XML Digital Signature APIを使用して署名を検証します。しかし、このドキュメントはSAML 2.0アサーションであり、Webアプリケーションへのシングルサインオンに使用されます。したがって、XML文書に署名するために使用されたX.509証明書の信頼を確立する必要があります。仲介者が発行したX.509証明書の信頼を確立するにはどうすればよいですか?
は私がしようとすると、この信頼を確立するために使用していたコードは次のとおりです。
certPathValidator.validate()
への呼び出しを実行し
String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar);
FileInputStream is = new FileInputStream(filename);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "changeit";
keystore.load(is, password.toCharArray());
PKIXParameters params = new PKIXParameters(keystore);
params.setRevocationEnabled(false);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
CertPath certPath = certFactory.generateCertPath(Arrays.asList(signatureCertificate));
CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
CertPathValidatorResult result = certPathValidator.validate(certPath, params);
PKIXCertPathValidatorResult pkixResult = (PKIXCertPathValidatorResult) result;
TrustAnchor ta = pkixResult.getTrustAnchor();
X509Certificate cert = ta.getTrustedCert();
がメッセージPath does not chain with any of the trust anchors
とCertPathValidatorException
をスローします。
証明書を調べると、OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign,OU=VeriSign International Server CA - Class 3,OU=VeriSign\, Inc.,O=VeriSign Trust Network
によって発行されたことが示されます。 これは、JDKのcacertsキーストアの信頼アンカーの1つではありません。
しかし、IEを使用して同様の証明書のトラストチェーンを調べると、は、VeriSign Class 3 Public Primary CA
によって発行されました。これはJDKのcacertsキーストアの信頼アンカーの1つです。
私の質問:Javaでこの証明書を検証するにはどうすればよいですか?
感謝。これは愚かな質問かもしれませんが、発行者のX.509証明書を取得するにはどうすればよいですか? –
http://www.verisign.com/support/roots.html - 登録フォームのすぐ下には、すべてのVerisignルート証明書をダウンロードするリンクがあります。 – xelco52
優秀、ありがとうございます。必要な証明書はそのサイトにはありませんでしたが、私はGoogleを使ってその証明書を見つけることができました。再度、感謝します。 –