openssl signer command to java code PKCS#7 help me

Viewed 90

I have a wounded receipt.p7b file is poor from the file created via openssl but it hurts where can i even do it?

openssl command

$ openssl cms -sign -nodetach -binary -in receipt.json -text -outform der -out receipt.p7b -nocerts -signer my_certificate51.crt -inkey my_key.key

my java code

OutputStream os = new FileOutputStream("C:\\Tax-Integration\\src\\main\\resources\\receipt.p7b");
        os.write(sign(data));


  public byte[] sign(byte[] data)
            throws IOException, CertificateException, OperatorCreationException, CMSException {
        Security.addProvider(new BouncyCastleProvider());
        JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter();
        X509Certificate serverCertificate = certificateConverter.getCertificate(loadSigner());
        PrivateKeyInfo privateKeyInfo = loadInKey();
        PrivateKey inKey = new JcaPEMKeyConverter().getPrivateKey(privateKeyInfo);
        ContentSigner sha1Signer = new JcaContentSignerBuilder("SHA1WithRSA").setProvider("BC").build(inKey);
        CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
        JcaDigestCalculatorProviderBuilder digestProviderBuilder = new JcaDigestCalculatorProviderBuilder().setProvider("BC");
        JcaSignerInfoGeneratorBuilder generatorBuilder = new JcaSignerInfoGeneratorBuilder(digestProviderBuilder.build());

        generator.addSignerInfoGenerator(generatorBuilder.build(sha1Signer, serverCertificate));

        CMSProcessableByteArray bytes = new CMSProcessableByteArray(data);
        CMSSignedData signedData = generator.generate(bytes, true);

        return signedData.getEncoded();
    }


 public X509CertificateHolder loadSigner() throws IOException {
        InputStream rootCAFile = new FileInputStream("C:\\my_certificate51.crt");
        PEMParser parser = new PEMParser(new InputStreamReader(rootCAFile));
        return (X509CertificateHolder) parser.readObject();
    }

    public PrivateKeyInfo loadInKey() throws IOException {
        InputStream key = new FileInputStream("C:\\my_key.key");
        PEMParser parser = new PEMParser(new InputStreamReader(key));
        return (PrivateKeyInfo) parser.readObject();
    }
0 Answers
Related