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)
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.
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.
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.
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
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-----
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.
Recommended Posts