Электронная почта S / MIME X509 - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь отправить подписанное электронное письмо, однако в своей учетной записи Outlook я постоянно вижу, что электронное письмо было подделано (и я вижу подпись электронной почты), однако я не могу допустить, чтобы этот сертификат был доверенным или известным. Я думаю, что, возможно, в этом и заключается проблема с кодом, поэтому здесь я приведу его немного.

    public SMIMESignedGenerator getSmimeSignedGenerator(Email email){
    SMIMESignedGenerator gen = new SMIMESignedGenerator();
    ASN1EncodableVector signedAttrs = new ASN1EncodableVector();
    SMIMECapabilityVector caps = new SMIMECapabilityVector();

    caps.addCapability(SMIMECapability.dES_EDE3_CBC);
    caps.addCapability(SMIMECapability.rC2_CBC, 128);
    caps.addCapability(SMIMECapability.dES_CBC);



    X509Certificate certificate = createCertificate(email.certificate());
    PrivateKey privateKey = createPrivateKey(email.privateKey());

    X500NameBuilder xnb = new X500NameBuilder();
    xnb.addRDN(BCStyle.CN,email.from().name());
    X500Name name = xnb.build();

    IssuerAndSerialNumber issAndSer = new IssuerAndSerialNumber(name, certificate.getSerialNumber());

    signedAttrs.add(new SMIMEEncryptionKeyPreferenceAttribute(issAndSer));
    signedAttrs.add(new SMIMEEncryptionKeyPreferenceAttribute(SMIMEUtil.createIssuerAndSerialNumberFor(certificate)));
    signedAttrs.add(new SMIMECapabilitiesAttribute(caps));

    gen.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder()
            .setProvider("BC")
            .setSignedAttributeGenerator(new AttributeTable(signedAttrs))
            .build("SHA1withRSA", privateKey, certificate));

    List<Certificate> certList = new ArrayList<>();
    certList.add(certificate);
    gen.addCertificates(new JcaCertStore(certList));
    return gen;
}

Код для подписи:

            SMIMESignedGenerator gen = getSmimeSignedGenerator(email);
            MimeMultipart contentPart = new MimeMultipart("alternative");
            MimeBodyPart contentBodyPart = new MimeBodyPart();
            contentBodyPart.setContent(contentPart);
            MimeMultipart mm = gen.generate(contentBodyPart);
            message.setContent(mm, mm.getContentType());
            message.saveChanges();

Однако я не могу доверять этому сертификату и проверить это. Есть ли в моем коде ошибки или ошибки, связанные с полученной ошибкой? Или это нормально на ма c? Я проверил, что это отправка в виде подписанного электронного письма, поэтому я понятия не имею, почему это происходит.

Я вижу, что я получаю подпись. Вот фрагмент из отправленного мной электронного письма.

    Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...