我正在寻找一个java库或代码来动态生成证书,公钥和私钥,而不使用第三方程序(如openssl).
我觉得有些东西是使用keytool + openssl但是来自Java代码.
考虑使用ssl和客户端身份验证保护的基于java servlet的Web应用程序.我希望servlet容器仅在请求时使用Java代码生成客户端证书(例如,pkcs12格式).
我想要生成一次密钥对并重用它.
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 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) 我正在尝试使用通过使用 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 ×4
amazon-kms ×1
cryptography ×1
itext7 ×1
java-11 ×1
keystore ×1
keytool ×1
openssl ×1
ssl ×1