Я хочу подписать содержимое файла с сертификатом в java.файл знака с надувным замком в java
С терминалом и OpenSSL, я могу это сделать:
openssl smime -sign -in nosign.mobileconfig -out signed.mobileconfig -signer server.crt -inkey server.key -certfile cacert.crt -outform der -nodetach
server.crt и .key являются файлы подписать, и я думаю, что я понимаю, что cacert.crt вложен внутрь из содержания.
Наконец-то, у меня есть файл, подписанный и доверенный.
В Java я не могу использовать openssl (не хочу запускать команду openssl), поэтому я должен подписать его с помощью lib.
Чтобы сделать это, я использую Надувной замок (версия 1,53)
вот мой код:
byte[] profile = ...; // I can have it also in String
// the certificate in -certfile
FileInputStream inputStream = new FileInputStream("src/main/resources/cacert.crt");
byte[] caCertificate = ByteStreams.toByteArray(inputStream);
// the certificate to sign : server.crt, embedded in p12
X509Certificate serverCertificate = (X509Certificate) this.keyStore.getCertificate("1");
// Private key is the server.key
ContentSigner sha1Signer = new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC").build(this.privateKey);
CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
generator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().setProvider("BC").build()).build(sha1Signer, serverCertificate));
// the embedded certificate : cacert.crt, but I don't know if it is good to do that this way
X509CertificateHolder holder = new X509CertificateHolder(caCertificate);
generator.addCertificate(holder);
CMSProcessableByteArray bytes = new CMSProcessableByteArray(profile);
CMSSignedData signedData = generator.generate(bytes, true);
System.out.println("signedData : \n" + signedData.getEncoded());
Можете ли вы помочь мне иметь хорошие подписанные данные, пожалуйста? Благодаря !
EDIT: я получил ошибку в
X509CertificateHolder holder = new X509CertificateHolder(caCertificate);
java.io.IOException: неизвестный тег 13 встречается
Вы читали этот учебник https://docs.oracle .com/javase/tutorial/security/apisign/step3.html –
В чем проблема/вопрос? Вы получаете сообщения об ошибках или что-то еще? – JimmyB
У меня ошибка в X509Certificate Держатель для хранения = новый X509CertificateHolder (caCertificate); java.io.IOException: неизвестный тег 13 столкнулся Я проверяю cacert, и он хорошо сформирован .. – zarghol