Использование пользовательских сертификатов для Authorize.net AIM API в Rails на Heroku

На днях Authorize.net обновил свои сертификаты, чтобы они подписывались с использованием (SHA-2).

Наши клиенты теперь получают эту ошибку от Authorize.net:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Поэтому мне нужно использовать их в нашем приложении Rails на Heroku. Набор корневых сертификатов Heroku не включает их, поэтому я должен включить их в ActiveMerchant, но мне не повезло найти четкие инструкции, как это сделать правильно. Вот что я пробовал до сих пор:

Я скачал пять корневых сертификатов, необходимых для Authorize.net, и связал их вместе как "cacert.pem", заменив существующий файл "cacert.pem" в моем приложении /vendor/plugins/active_merchant/lib/certs/ папка (я сделал резервную копию старого cacert.pem сначала файл, на всякий случай). Это само по себе не решило проблему - я все еще получаю ту же ошибку в разработке.

Глядя на новый файл "cacert.pem", который я создал, я увидел, что последний сертификат в цепочке ( https://cacert.omniroot.com/bc2025.crt) выглядит так:

0Çw0Ç_†��π0 *ÜHܘ �0Z10 UIE10U Baltimore10U CyberTrust1"0 UBaltimore CyberTrust Root0 000512184600Z 250512235900Z0Z10 UIE10U Baltimore10U CyberTrust1"0 UBaltimore CyberTrust Root0Ç"0 *ÜHܘ �Ç�0Ç Ç�£ª"´ò=WË&röµy‘)‚·Ëïı∞„[é+)ödfl°]Ì∞ m€(.Œb¢b˛¥à⁄Î8Î!ù¿A+R{àw”è«∫πàµj ÁsË@ߗàbç-Âè¶P“®P√(Íı´%áäöñ©g∏?’˜˘R/¬’ppè¿ Àö·Ÿ 3zw÷¯ÏπÒhDBH“¿¬§Æ^``˛∂¶¸¥›Y‘Yòcı•c‡ê}]≤zÛÖÍΑÆ^Ñ>_ˇÌiº˘96ruœwRMÛ…ê,π=Â…#S?$ò!\ô)Ω∆:ÏÁnÜ:kótc3Ωh1xçvø¸ûé]*ÜßMê‹'9�£E0C0UÂùY0ÇGXè˙T6Ü{:µM0Uˇ0ˇ0Uˇ0 *ÜHܘ �Ç�Ö]é‰oQhB†›ªO'%ÑΩ˜d˝-◊0„§Î⁄))∂y?vˆ#∏ ˘X§‘apΩajä’ Ω≈º0|÷È%çÜ@OÏã~8∆7OÌ›h1éL“≥tÓæu^Hpˇ\Ñ¿yÖ∏˝æe£¿¥¯R79’©1zø†*Ùô˜£EÇ„<^ıùûµ»û|.»§ûNKm˝pmkcΩdÊ∑ŒÚü.ª∑ÚPàsí¬‚„çö2´é›ÈÓ~5´êØ>0îz–3=ßeı¸éûbœGD,]ªµ2“G“8.–˛Å‹2jµÓ<’¸ÁÅ√$BÍc9©

Поэтому я удалил эту часть в надежде, что у меня будет хотя бы действительный файл. Не уверен, что это помогло, потому что я все еще получил сообщение об ошибке.

Я также пытался изменить ActiveMerchant's connection.rbconfigure_ssl метод, изменение

http.ca_file = File.dirname(__FILE__) + '/../../certs/cacert.pem'

в

http.ca_file = Rails.root + "app/vendor/plugins/active_merchant/lib/certs/cacert.pem"

Я не уверен, указывало ли это на мой cacert.pem файл правильно, так как я не могу записать в журнал разработки из этого файла. Я даже не знаю, будет ли этот файл использоваться, если он правильно указывает на файл. Существует серьезная нехватка информации об этом онлайн.

Мой сайт не работает, пока я не решу эту проблему. Я в полной панике. Любые идеи, где мне нужно искать / что мне нужно делать?

2 ответа

Благодаря вашему посту я смог решить эту проблему. Я установил последнюю версию activemerchant gem на другой сервер и скопировал cacert.pem из новой версии gem в каталог /vendor/plugins/active_merchant/lib/certs/ моего неработающего сервера. Перезапустите Apache и смог успешно обработать cc.

Может быть немного обходным путем, но, по крайней мере, теперь мы можем снова принимать платежи.

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

Я просто скопировал содержимое старого cacert.pem файл, и вставил, что в начале моего нового cacert.pem файл. Я также оставил сертификат корневого сертификата CyberTrust Baltimore CyberTrust, который я упоминал выше.

Я также вернул ActiveMerchant's connection.rbconfigure_ssl метод обратно в исходное состояние.

TL; DR

Объедините новые сертификаты в цепочку после всех старых сертификатов в cacert.pem, Boom! Готово. Следующий!

Другие вопросы по тегам