sách gpt4 ai đã đi

java - 我的代码可以验证自签名证书,但在使用 VeriSign 颁发的证书时失败

In lại 作者:行者123 更新时间:2023-12-01 12:21:55 30 4
mua khóa gpt4 Nike

我的应用程序正在使用 java 安全 API 来签署文件并验证它。在签名时,我使用 PFX 文件和密码作为输入,签名后我使用字节生成签名文件。在验证过程中,我使用签名文件、证书文件和签名文件作为输入。请在下面找到我在验证中使用的代码:

 // KeyFilePath= path of certificate file
// fileToVerify = path of signed file
// signatureFilePath = path of signature file



InputStream inputStream = new FileInputStream(KeyFilePath);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate x509Certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);

// input the signature bytes
String sigFile = signatureFilePath;

FileInputStream sigFileInputStream = new FileInputStream(sigFile);
byte[] sigToVerify = new byte[sigFileInputStream.available()];
sigFileInputStream.read(sigToVerify);
sigFileInputStream.close();

PublicKey pubKey = x509Certificate.getPublicKey();
Signature signature = Signature.getInstance(signAlgorithm);

signature.initVerify(pubKey);

// Update and verify the data
thử {
FileInputStream dataFileInputStream = new FileInputStream(fileToVerify);
BufferedInputStream bufferedInputStream = new BufferedInputStream(dataFileInputStream);

byte[] buffer = new byte[IVerifyDigitalSignature.BYTE_SIZE];
int bufferedInputStreamLength;

while (bufferedInputStream.available() != IVerifyDigitalSignature.ZERO_LENGTH) {
bufferedInputStreamLength = bufferedInputStream.read(buffer);
signature.update(buffer, IVerifyDigitalSignature.ZERO_LENGTH, bufferedInputStreamLength);
}

bufferedInputStream.close();

// Verify the Signature
x509Certificate.verify(pubKey);
verifyDigitalSignature = signature.verify(sigToVerify);

请帮我解决该问题,因为它尚未关闭。

1 Câu trả lời

如果您想自己执行此操作,是的,您必须迭代链中的证书从信任 anchor 到您所需的证书,无论它有多长(对于不同的 CA、类别和不同的时间,它可能会有所不同)。使用“父”(下一个更高级别)证书中的公钥验证每个“子”(较低级别)证书上的签名只是一个其中相当小的一部分;还需要许多其他步骤。通常,xuất hiện正确的证书就可能是一个问题;如果您已经拥有正确的链条,那么您就拥有了领先优势。但你确定你拥有“正确的”链条吗?通常,给定的证书有多个可能的链,有时其中一些是有效的,但另一些已经过期或变得无法验证。Verisign 特别发布了我相信所有最近的证书都在其 G5 根下,但提供了替代路径对于不是最新的,有时甚至无法更新的依赖者,返回(有效)G1。

大多数情况下的算法在“PKIX”RFC5280中定义。 ,除了 OCSP RFC6960代替 CRL 进行撤销正变得越来越普遍。您可能会忽略跨层次结构和名称约束,据我所知实际上并没有使用它们由 Verisign 等公共(public) CA 提供,以及 CA 确实使用但用户/依赖者不关心的策略内容。 https://security.stackexchange.com/questions/37409/certificate-chain-checking有一个很好但不完整的介绍。

但是你可能会更好使用Java的(实际上是JCE的)CertPathValidator for "PKIX" - 如果需要CertPathBuilder -我已经向您介绍过。这已经由专家编写和测试。只是Gọi它还是有点复杂,但远没有重写它所做的所有事情那么复杂。

关于java - 我的代码可以验证自签名证书,但在使用 VeriSign 颁发的证书时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607365/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com