Vor kurzem habe ich einen Fehler mit dem PayPal Ruby SDK erhalten, aber die Lösung besteht darin, dass es keine japanischen Informationen gibt, auch wenn ich bei Google suche und Englisch kaum betroffen ist. Machen Sie sich also eine Notiz. Es scheint in den letzten Tagen passiert zu sein.
SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)
Die Ursache liegt auf der PayPal-Seite. PayPal Ruby SDK Gem hat ein SSL-Zertifikat intern verpackt, und dieses Zertifikat wurde kürzlich entfernt. Ich weiß nicht, warum PayPal es so gemacht hat, dass das Zertifikat in den Gem eingefügt wurde, aber es kann durch Hacken des SDK gelöst werden.
Sie können das Problem beheben, indem Sie die nicht abgelaufene PEM zum Zertifikat im SDK hinzufügen und den Rails-Server neu starten.
Laden Sie die von PayPal im Referenzartikel angekündigte PEM herunter. Ich habe die DigiCert High Assurance EV-Stammzertifizierungsstelle verwendet, aber ich denke, jeder ist in Ordnung.
Bezugsquellen für DigiCert High Assurance EV Root CA.
Download here: https://www.digicert.com/digicert-root-certificates.htm
Laden Sie hier die DigiCert High Assurance EV Root CA PEM herunter.
Verwenden Sie für Mac und Unix den Befehl find
, um ihn zu finden. Suchen Sie für Rails-Apps im Stammverzeichnis der Anwendung. Wenn Sie in der Produktionsumgebung nicht wissen, wo sich Ruby befindet, können Sie mit sudo alle von / (find / -name paypal.crt -print
) durchsuchen.
Da mein Server AWS ist, habe ich wie folgt unter ~ /
gesucht.
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
Überprüfen Sie den Inhalt der heruntergeladenen PEM-Datei.
Lokales Mac-Terminal
$ cat DigiCertHighAssuranceEVRootCA.crt.pem
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
Unterwegs weggelassen
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
Bearbeiten Sie paypal.crt gefunden von find. Die folgenden Zeilen 172 bis 196 sind die hinzugefügten Teile. Ich habe es gerade unten hinzugefügt, aber beachten Sie, dass es ====== erfordert und durch den genauen Namen getrennt ist (DigiCert High Assurance EV-Stammzertifizierungsstelle).
Auf Schienenserver ausführen
[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
Unterwegs weggelassen
191 eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
192 hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
193 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
194 vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
195 +OkuE6N36B9K
196 -----END CERTIFICATE-----
Es hängt von der Umgebung ab, aber in meinem Fall kann es mit systemctl unter AWS neu gestartet werden. Führen Sie es also aus.
AWS
[ec2-user@awsome_server ~]$ sudo systemctl restart rails
Jetzt verschwindet der SSL-Fehler und der API-Aufruf kann normal erfolgen.
Recommended Posts