[RAILS] Comment résoudre l'erreur SSL_connect dans le SDK PayPal Ruby

introduction

Récemment, j'ai eu une erreur avec le SDK PayPal Ruby, mais la solution est qu'il n'y a pas d'informations japonaises même si je recherche Google, et l'anglais est à peine touché, alors prenez note. Cela semble s'être produit ces derniers jours.

SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)

1. Cause

La cause est du côté de PayPal. PayPal Ruby SDK Gem a emballé un certificat SSL en interne, et ce certificat a été récemment supprimé. Je ne sais pas pourquoi PayPal a fait en sorte que le certificat soit inséré dans le Gem, mais cela peut être résolu en piratant le SDK.

2. Solution

Il peut être résolu en ajoutant le PEM qui n'a pas expiré au certificat dans le SDK et en redémarrant le serveur Rails.

3. Procédure de solution

(1) Télécharger PEM

Téléchargez le PEM annoncé par PayPal dans l'article de référence. J'ai utilisé le DigiCert High Assurance EV Root CA, mais je pense que tout va bien.

Où obtenir DigiCert High Assurance EV Root CA

Download here: https://www.digicert.com/digicert-root-certificates.htm

Téléchargez le DigiCert High Assurance EV Root CA PEM à partir d'ici.

スクリーンショット 2020-08-04 午後10.29.53.png

(2) Recherchez l'emplacement de paypal.crt dans le SDK

Pour Mac et Unix, utilisez la commande find pour le trouver. Pour les applications Rails, regardez sous le répertoire racine de l'application. Dans l'environnement de production, si vous ne savez pas où se trouve Ruby, vous pouvez utiliser sudo pour tout rechercher à partir de / (find / -name paypal.crt -print).

Puisque mon serveur est AWS, j'ai cherché sous ~ / comme suit.

rails_root


[ec2-user@awsome_server ~]$ find ./ -name paypal.crt -print 2>/dev/null
./.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/paypal-sdk-rest-1.7.4/data/paypal.crt

(3) Ajouter PEM à paypal.crt

Vérifiez le contenu du fichier PEM téléchargé.

Terminal Mac local


$ cat DigiCertHighAssuranceEVRootCA.crt.pem
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL

Omis en chemin

Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----

Modifier paypal.crt trouvé par find. Les lignes 172 à 196 suivantes sont les pièces ajoutées. Je viens de l'ajouter en bas, mais notez qu'il nécessite ====== et est séparé par le nom exact (DigiCert High Assurance EV Root CA).

Serveur d'exécution sur rails


[ec2-user@awsome_server ~]$ sudo vi paypal.crt

    168 CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
    169 bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
    170 D/xwzoiQ
    171 -----END CERTIFICATE-----
    172 DigiCert High Assurance EV Root CA
    173 =======================================================
    174 -----BEGIN CERTIFICATE-----
    175 MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
    176 MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
    177 d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
    178 ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
    179 MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
    180 LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug

Omis en chemin

    191 eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
    192 hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
    193 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
    194 vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
    195 +OkuE6N36B9K
    196 -----END CERTIFICATE-----

(4) Redémarrez le serveur Rails

Cela dépend de l'environnement, mais dans mon cas, il peut être redémarré avec systemctl sur AWS, alors exécutez-le.

AWS


[ec2-user@awsome_server ~]$ sudo systemctl restart rails 

Maintenant, l'erreur SSL disparaît et l'appel API peut être effectué normalement.

Article de référence

Recommended Posts

Comment résoudre l'erreur SSL_connect dans le SDK PayPal Ruby
Comment itérer indéfiniment en Ruby
Comment installer Bootstrap dans Ruby
Comment résoudre OpenSSL :: SSL :: SSLError: SSL_connect qui se produit dans Ruby paypal-sdk-rest gem
Comment afficher les messages d'erreur en japonais
Comment trouver la cause de l'erreur Ruby
Comment implémenter la pagination dans GraphQL (pour ruby)
Comment résoudre les erreurs qui se produisent lors du test d'intégration "Ruby on Rails"
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
[Ruby On Rails] Comment réinitialiser DB dans Heroku
Comment lancer une autre commande dans un programme Ruby
Comment utiliser le retour Ruby
[Ruby] Comment commenter
Ruby: Comment utiliser les cookies
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment utiliser Lombok au printemps
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment exécuter JUnit dans Eclipse
Essayez d'implémenter Yuma dans Ruby
Comment exécuter Ant dans Gradle
Comment maîtriser la programmation en 3 mois
Comment installer Ruby via rbenv
[Erreur de version de Ruby] Comment résoudre Votre version de Ruby est ~, mais votre Gemfile a spécifié ~
Comment utiliser Ruby on Rails
Comment apprendre JAVA en 7 jours
Comment obtenir des paramètres dans Spark
Comment écrire Ruby en une seule ligne Résumé par débutant
Comment utiliser InjectorHolder dans OpenAM
[Note technique] Comment résoudre les erreurs
Comment installer jQuery dans Rails 6
Comment utiliser les classes en Java?
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
Comment définir Lombok dans Eclipse
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
Comment utiliser la méthode Ruby inject
Comment concaténer des chaînes avec Java
Comment installer Swiper in Rails
AtCoder [Practice A] Note technique
[Note technique] Comment résoudre les erreurs
[Note technique] Qu'est-ce que "inclure" dans Ruby?
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Comment insérer un traitement avec n'importe quel nombre d'éléments dans le traitement itératif dans Ruby
[swift5] Comment spécifier la couleur en hexadécimal