Я пытаюсь отправить подписанное электронное письмо, однако в своей учетной записи 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