Расшифровка 2C2P PKC7 из PHP -> Ruby - PullRequest
1 голос
/ 17 марта 2019

Я пытаюсь преобразовать немного кода PHP в Ruby.Фрагмент кода находится здесь: https://developer.2c2p.com/docs/read-payment-response-1 (расположен внизу страницы), и я пытаюсь понять, как бы я реализовал это в Ruby.Я дошел до:

      payment_response = params.dig(:paymentResponse)
      cert_store = OpenSSL::X509::Store.new
      my_cert =  OpenSSL::X509::Certificate.new(File.read('config/twoctwop_keys/demo2.crt'))
      signature = OpenSSL::PKCS7.new(File.read('config/twoctwop_keys/demo2.pem'))
      signature.verify([my_cert], cert_store, payment_response, OpenSSL::PKCS7::NOVERIFY)
      signature.data

Однако с учетом вышеизложенного я, кажется, получаю следующую ошибку:

ArgumentError: Не удалось проанализировать PKCS7: вложенная ошибка asn1

из следующей строки:

OpenSSL::PKCS7.new(File.read('config/twoctwop_keys/demo2.pem'))

Без вставки содержимого файла demo2.pem он содержит несколько сертификатов, поскольку я вижу:

Bag Attributes
    Microsoft Local Key set: <No Values>
    localKeyID: 01 00 00 00
    friendlyName: omitted
    Microsoft CSP Name: Microsoft RSA SChannel Cryptographic Provider
Key Attributes
    X509v3 Key Usage: 10
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,3A2DD8162BC67378
   ..... key......
-----END RSA PRIVATE KEY-----
Bag Attributes
    localKeyID: 01 00 00 00
    friendlyName: demo2.2c2p.com
subject=/C=SG/ST=Singapore/L=Singapore/O=xx Pte Ltd./OU=xxx IT/CN=xxx
issuer=xxxx
-----BEGIN CERTIFICATE-----
   ....key....
-----END CERTIFICATE-----
Bag Attributes: <Empty Attributes>
subject=/CN=SinaptIQ CA
issuer=/CN=SinaptIQ CA
-----BEGIN CERTIFICATE-----
  ....key....
-----END CERTIFICATE-----

Есть что-то, чего я здесь не понимаю.

1 Ответ

0 голосов
/ 17 марта 2019

Это так же просто, как сделать:

payment_response = params.dig(:paymentResponse)
certificate = OpenSSL::X509::Certificate.new(File.read('config/twoctwop_keys/demo2.crt'))
private_key = OpenSSL::PKey::RSA.new(File.read('config/twoctwop_keys/demo2.pem'), <passphrase>)
body = OpenSSL::PKCS7.new(Base64.strict_decode64(payment_response))
Hashie::Mash.new(Hash.from_xml(@body.decrypt(@private_key, @certificate))['PaymentResponse'])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...