Шифрование PKCS7

Шифрование PKCS7

Мне нужна ваша поддержка. Я хотел сделать шифрование pkcs, используя свой сертификат и сертификат третьей стороны.

У меня есть следующие компоненты, и я хотел бы получить зашифрованный выходной файл pkcs7.

Исходный файл: PayFile_143_2300000004_20170508_161457.txt Мой сертификат для входа:

mycertificate.cer и его закрытый ключ — keyfile.key Сертификат стороннего банка (публичный): public_2017-2018_base64enc.cer

Итак, если я использую следующую команду

openssl smime -sign -signer mycertificate.cer -inkey keyfile.key -in PayFile_143_2300000004_20170508_161457.txt | openssl smime -encrypt -out PayFile_143_2300000004_20170508_161457.txt.smime public_2017-2018_base64enc.cer mycertificate.cer

Будет ли у меня правильный выходной зашифрованный PKCS7 выходной файл. Пожалуйста, дайте мне знать.

Но когда банк расшифровывает его на своем конце, они сталкиваются с проблемой с заголовком.

Ниже приведены логи расшифровки, предоставленные банком.

starting ReceiveMsg...
logging in...
login successful
getting decryption key and verification certificate...
decryption key and verification certificate extracted
creating mime session
session created
opening mime envelope
message Content-Type [application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"]
message Content-Description [null]
message Content-Disposition [attachment]
message Content-Transfer-Encoding [base64]
getting mime message content
content handler [oracle.security.crypto.smime.SmimeEnveloped]
---------------------------------------
processing encrypted content
content decrypted
decrypted Content-Type [multipart/signed; protocol="application/x-pkcs7-signature"; micalg="sha1"; boundary="----DA713A069014AEA715F4E38046E2CA0F"]
content handler [oracle.security.crypto.smime.SmimeMultipartSigned]
-Multipart 1-
Multipart Content-Type [multipart/signed; protocol="application/pkcs7-signature";
      boundary="SMS:gW4H/s2Z6GzgMG1DTTNnUi3TmH8="]
Multipart contains [2] body parts
Part 0 Content-Type [text/plain]
Part 0 Content-Description [null]
Part 0 Content-Disposition [null]
Part 0 Content-Transfer-Encoding [null]
Part 0 Content-ID [null]
Part 0 Content-Language [null]
Part 0 Content-MD5 [null]
Part 0 File-Name [null]
Part 0 Header name [], value [20:61]
Part 0 Header name [], value [23B:CRED]
Part 0 Header name [], value [32A:170508RUB100,00]
Part 0 Header name [], value [50K:/40702810200101102376]
Part 0 Header name [???7743170710.???774301001], value [???7743170710.???774301001]
Part 0 Header name [], value [57D://RU044525460.40702840401735933455]
Part 0 Header name [??? ?????????], value [??? ?????????]
Part 0 Header name [115054, ?????????? ???????, ??? 2, ?????], value [115054, ?????????? ???????, ??? 2, ?????]
Part 0 Header name [??????,,RU,], value [??????,,RU,]
Part 0 Header name [], value [59:/40702840401735933455]
Part 0 Header name [???7704662571.???770901001], value [???7704662571.???770901001]
Part 0 Header name [??? "????? ?????? ????? ???????"], value [??? "????? ?????? ????? ???????"]
Part 0 Header name [,??.???????? ???,9], value [,??.???????? ???,9]
Part 0 Header name [??????,,RU,105064], value [??????,,RU,105064]
Part 0 Header name [], value [70:??????????, ???????? ???? ????????? ? ????????????]
Part 0 Header name [], value [71A:SHA]
Part 0 Header name [], value [72:/RPP/61.170508.3.ELEK.170508]
content handler [java.lang.String]
-Multipart 1-
Content-Type=Cp1251
charset=null
writing text mime data to file 
data length=0
data =
done...

Можете ли вы проверить и сообщить мне, в чем проблема?

Ценю твою помощь!! Спасибо, Никхил

решение1

Похоже, что банк расшифровывает, но не может разобрать SMIME, представляющий подписанный файл. Это отправляется по электронной почте? Вы пробовали изменить формат подписанного файла с помощью "-outform PEM"?

openssl smime -sign -signer mycertificate.cer -inkey keyfile.key -in PayFile_143_2300000004_20170508_161457.txt -outform PEM | openssl smime -encrypt -out PayFile_143_2300000004_20170508_161457.txt.smime public_2017-2018_base64enc.cer mycertificate.cer

Вот короткий скрипт, который отправляет подписанные и зашифрованные сообщения. Замените переменные среды на значения для вас и вашего банка. Также обратите внимание, что я использую cert.pem и key.pem. Это просто мои предпочтения, чтобы я мог легко определить, находятся ли файлы сертификата и ключа в формате PEM или DER. Это было написано и протестировано на CentOS 7 с OpenSSL 1.0.1e-fips 11 февраля 2013 г. Postfix — это MTA, поэтому команда 'sendmail' — это 'интерфейс совместимости Postfix с Sendmail'.

#!/bin/bash

FROM="Your Name <[email protected]>"
FROMCERT=cert.pem
FROMKEY=key.pem
[email protected]
TOCERTS="bankcert.pem cert.pem"
SUBJECT="Signed and Encrypted Email Test - $(date)"

(echo -e "Content-Type: text/plain; charset=windows-1251\n"; cat file.txt) \
| openssl smime -sign \
  -signer ${FROMCERT} \
  -inkey ${FROMKEY} \
| openssl smime -encrypt \
  -from "${FROM}" \
  -to "${TO}" \
  -subject "${SUBJECT}" \
  -des3 \
  ${TOCERTS} \
| sendmail -t -f "${FROM}" -F "${FROM}"

Связанный контент