相关疑难解决方法(0)

使用Java生成证书,公钥和私钥

我正在寻找一个java库或代码来动态生成证书,公钥和私钥,而不使用第三方程序(如openssl).

我觉得有些东西是使用keytool + openssl但是来自Java代码.

考虑使用ssl和客户端身份验证保护的基于java servlet的Web应用程序.我希望servlet容器仅在请求时使用Java代码生成客户端证书(例如,pkcs12格式).

java ssl openssl keytool

13
推荐指数
2
解决办法
3万
查看次数

如何在Java中存储和重用密钥对?

我想要生成一次密钥对并重用它.

public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048, new SecureRandom());
        KeyPair pair = generator.generateKeyPair();

        return pair;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

java cryptography keystore

9
推荐指数
1
解决办法
2636
查看次数

在 Java 9-13 中生成自签名证书的 API 是什么?

我们有一个代码可以生成运行 Java 8 的自签名证书(该 api 已在 Java 9 中删除)。从 JDK 9 开始,似乎会有一个用于生成自签名证书的新 API:https : //bugs.java.com/bugdatabase/view_bug.do?bug_id= JDK- 8165481

有没有做同样的例子:

   class Foo{
     public Foo(){
        CertAndKeyGen keyGen = new CertAndKeyGen("RSA", "SHA256withRSA", null);
        keyGen.generate(2048);
        rootPrivateKey = keyGen.getPrivateKey();
        rootCertificate = keyGen.getSelfCertificate(new X500Name("CN=FooBar"), (long) 24 * 60 * 60);
        CertAndKeyGen subKeyGen =new CertAndKeyGen("RSA","SHA256withRSA",null);
        subKeyGen.generate(2048);
        subPrivateKey = subKeyGen.getPrivateKey();
        subCertificate = subKeyGen.getSelfCertificate(new X500Name("CN=FizzBuzz"), (long) 24 * 60 * 60);

        rootCertificate   = signCertificate(rootCertificate, rootCertificate, rootPrivateKey);
        subCertificate = signCertificate(subCertificate, rootCertificate, rootPrivateKey);

        X509Certificate[] certChain = new X509Certificate[]{subCertificate,rootCertificate};

        KeyStore store = …
Run Code Online (Sandbox Code Playgroud)

java x509certificate java-11

3
推荐指数
2
解决办法
493
查看次数

使用 AWS KMS 返回的数字签名对 PdfDocument 进行签名

我正在尝试使用通过使用 AWS KMS 签署我的 PdfDocument 的 SHA256 摘要获得的签名在 PDF 本身上应用签名。我什至不确定我是否朝着正确的方向前进。

一切运行正常,但生成的文件的签名会引发错误:

Error during signature verification. ASN.1 parsing error:  Error encountered while BER decoding:
Run Code Online (Sandbox Code Playgroud)

如果这很重要,我可以从 AWS 检索公钥,但私钥保留在他们身边。我在网上看到的大多数文档都假定您可以访问私钥。此外,由于 AWS 处理签名,我不确定如何或从何处获取证书链。我发现的所有文档也需要该证书链。

代码

首先,我创建了一个空的签名字段,因为大多数文档都指示您这样做。我认为可能存在问题,PdfName.Adbe_pkcs7_detached但如果这是错误的,我不知道还有什么可以代替它。

public void addEmptySignatureField(File src, File destination, String fieldName) throws IOException, GeneralSecurityException {
    try (
            var reader = new PdfReader(src);
            var output = new FileOutputStream(destination)
    ) {
        var signer = new PdfSigner(reader, output, new StampingProperties());

        signer.getSignatureAppearance()
                .setPageRect(new Rectangle(36, 748, 200, 100))
                .setPageNumber(1)
                .setLocation("whee")
                .setSignatureCreator("Mario")
                .setReason("because")
                .setLayer2FontSize(14f);
        signer.setFieldName(fieldName);

        IExternalSignatureContainer blankSignatureContainer …
Run Code Online (Sandbox Code Playgroud)

java pdf-generation amazon-web-services amazon-kms itext7

2
推荐指数
1
解决办法
848
查看次数