特定のメッセージが、自分のトラスト アンカーによって認識されるエンティティ証明書からの有効な署名で署名されているかどうかを確認しようとしています。私はこれをやっています:
public static boolean isValid(CMSSignedData signedData, X509Certificate rootCert) throws Exception
{
CertStore certsAndCRLs = signedData.getCertificatesAndCRLs("Collection", "BC");
SignerInformationStore signers = signedData.getSignerInfos();
Iterator it = signers.getSigners().iterator();
if (it.hasNext()){
SignerInformation signer = (SignerInformation)it.next();
X509CertSelector signerConstraints = signer.getSID();
PKIXCertPathBuilderResult result = buildPath(rootCert, signerID, certsAndCRLs);
return signer.verify(result.getPublicKey(), "BC");
}
return false;
}
しかし、この行は私にコンパイルエラーを与えています:
X509CertSelector signerConstraints = signer.getSID();
SignerId から X509CertSelector にキャストできないためです。明示的なキャストを使用してみました:
X509CertSelector signerConstraints = (CertSelector) signer.getSID();
と:
X509CertSelector signerConstraints = (X509CertSelector) signer.getSID();
結果なし。これどうやってするの?ありがとう
PS: このコードは、David Hook による「Beginning Cryptography with Java」から抽出されたものですが、コンパイルされないことに注意してください。