Использование пользовательских сертификатов для 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Ωh1xçvø¸ûé]*ÜßMê‹'9�£E0C0UÂùY0ÇGXè˙T6Ü{:µM0Uˇ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.rb
configure_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.rb
configure_ssl
метод обратно в исходное состояние.
TL; DR
Объедините новые сертификаты в цепочку после всех старых сертификатов в cacert.pem
, Boom! Готово. Следующий!