[RAILS] So beheben Sie den SSL_connect-Fehler im PayPal Ruby SDK

Einführung

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)

1. Ursache

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.

2. Lösung

Sie können das Problem beheben, indem Sie die nicht abgelaufene PEM zum Zertifikat im SDK hinzufügen und den Rails-Server neu starten.

3. Lösungsverfahren

(1) Laden Sie PEM herunter

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.

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

(2) Suchen Sie den Speicherort von paypal.crt im SDK

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

(3) Fügen Sie PEM zu paypal.crt hinzu

Ü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-----

(4) Starten Sie den Rails-Server neu

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.

Referenzartikel

Recommended Posts

So beheben Sie den SSL_connect-Fehler im PayPal Ruby SDK
Wie man in Ruby auf unbestimmte Zeit iteriert
So installieren Sie Bootstrap in Ruby
So lösen Sie OpenSSL :: SSL :: SSLError: SSL_connect, das in Ruby paypal-sdk-rest gem auftritt
So zeigen Sie Fehlermeldungen auf Japanisch an
So finden Sie die Ursache des Ruby-Fehlers
So implementieren Sie Paginierung in GraphQL (für Ruby)
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
[Ruby On Rails] So setzen Sie die Datenbank in Heroku zurück
So starten Sie einen anderen Befehl in einem Ruby-Programm
Verwendung von Ruby return
[Ruby] Wie man auskommentiert
Ruby: Wie man Cookies benutzt
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
So rufen Sie den Hashwert in einem Array in Ruby ab
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
Wie man Lombok im Frühling benutzt
So finden Sie May'n in XPath
So blenden Sie die Bildlaufleiste in WebView aus
So führen Sie JUnit in Eclipse aus
Versuchen Sie, Yuma in Ruby zu implementieren
Wie man Ant in Gradle ausführt
Wie man die Programmierung in 3 Monaten beherrscht
So installieren Sie Ruby über rbenv
[Ruby-Versionsfehler] So lösen Sie Ihre Ruby-Version ist ~, aber Ihre Gemfile hat ~ angegeben
Verwendung von Ruby on Rails
Wie man JAVA in 7 Tagen lernt
So erhalten Sie Parameter in Spark
Wie schreibe ich Ruby, wenn in einer Zeile Zusammenfassung vom Anfänger
Verwendung von InjectorHolder in OpenAM
[Technisches Memo] So beheben Sie Fehler
So installieren Sie jQuery in Rails 6
Wie verwende ich Klassen in Java?
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
So setzen Sie Lombok in Eclipse
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
Verwendung der Ruby-Inject-Methode
So verketten Sie Zeichenfolgen mit Java
So installieren Sie Swiper in Rails
AtCoder [Übung A] Technisches Memo
[Technisches Memo] So beheben Sie Fehler
[Technischer Hinweis] Was ist "include" in Ruby?
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
So debuggen Sie die Verarbeitung im Ruby on Rails-Modell nur mit der Konsole
So fügen Sie die Verarbeitung mit einer beliebigen Anzahl von Elementen in die iterative Verarbeitung in Ruby ein
[swift5] So legen Sie die Farbe hexadezimal fest