2015-05-15 10 views
8

Ich bin in dieser sehr unglücklichen Situation:ist es möglich, Daten an TLSv1.1 + gesicherte Seite ohne curl und wget POST/GET zu senden?

  • ist Meine Website veraltete Software (Sicherheits-Patches angewandt werden) mit OpenSSL 0.9.8o 1. Juni 2010, die nicht TLSv1.1/1.2
  • I unterstützt auch Payment-Gateway haben, die PCI DSS-konform ist daher SSL und TLS früh dort verwendet

Meine Website deaktiviert wird, um Daten mit Payment Gateway auszutauschen, sondern als TLSv1.0 fallen gelassen wird, kann ich nicht mehr pHP-cURL-Bibliothek verwenden oder sogar file_get_contents() (oder wget/lynx/curl über shell)

Gibt es eine Problemumgehung, jede Option, wie TLSv1.1 + gesicherter Server verbunden wird, ohne integrierte Bibliotheken zu verwenden?

Ich weiß, dass einige Klassen in PHP wie phpseclib existiert, die SSH-Client, ideal für Leute, die nicht SSH2 module

Hat so etwas gibt es für PHP verwenden kann? Gibt es eine Möglichkeit, eine Verbindung zu meinem Gateway herzustellen?

Bisher meine beste Idee durch andere Server zum Gateway verbindet (mit aktualisierter Software)

+0

Sind Sie mit der Verwendung von integrierten Bibliotheken fest oder können Sie zusätzliche in den Benutzerbereich installieren? – Marek

+0

@Marek ich kann nicht integrierte PHP-Bibliotheken, Lynx, Wget, Curl wegen der alten OpenSSL Lib – Peter

+0

Ich weiß, dass ich fragte, ob Sie zusätzliche Libraties und Programme in Userspace, dh $ Home/bin installieren können – Marek

Antwort

0

Ich fand eine andere Lösung.

Auf sicheren Server gesetzt i zwei Virtual up - 443 für TLSv1.2 und eine andere für meine Website nur mit TLSv1.0 Unterstützung

Mehr Infos hier: https://serverfault.com/a/692894/122489

Danke für alle Antworten.

2

Ich möchte Ihre ursprüngliche Idee von Proxying auf einem anderen Server, außer Sie die Sicherheitseinschränkungen durch das Gateway auferlegt werden, zu umgehen, und im Umgang Bei Zahlungsinformationen ist das wahrscheinlich keine Idee.

Wenn Sie jedoch eine Vagrant-Instanz auf Ihrem eigenen Server mit aktualisierten Bibliotheken ausführen können, können Sie die unsichere Anfrage an die Vagrant-Instanz auf localhost weiterleiten und die Box nicht verlassen, dann von der Vagrant-Instanz hat Bibliotheken aktualisiert die sichere Kommunikation zu Ihrem Gateway.

+0

oder vielleicht nur eine einfache Apache verwenden/nginx auf einem anderen Port auf der gleichen Maschine? – Hafenkranich

4

Einmal verwendet i Utility namens stunnel für meinen Nicht-TLS-Client, Zitat von der Website:

Stunnel ist ein Proxy TLS-Verschlüsselungsfunktionalität vorhandener Clients und Servern ohne Änderungen in den Programmen Code hinzufügen . Die Architektur ist auf Sicherheit, Portabilität und Skalierbarkeit (einschließlich Lastenausgleich) optimiert und eignet sich daher für große Bereitstellungen.

+0

Ich habe einen anderen Ansatz (siehe Antwort von mir), aber ich denke, stunnel würde auch funktionieren. Also Kopfgeld geht an Sie, danke – Peter

1

Ich wollte Stunnel vorschlagen. ABER dafyc gut bemerkt.

Diese PCI-Einschränkungen sind nicht implementiert, um Menschen zu verlangsamen (nur .. lol). Sie existieren zum Schutz.

Sie werden Ihr Problem mit Stunnel lösen. Aber warum nicht den Website-Server aktualisieren?

Sie haben das SSL-Outdate ausfindig gemacht, aber als Server sind mehrere andere Fehler verfügbar.

Wenn sie eine andere Schwachstelle erkunden und Root-Zugriff erhalten, werden sie ein Stunnel-Passwort haben, um herauszufinden, was sich in der Pipe befindet.

Das scheint also nicht gut genug zu sein, um die Zuverlässigkeit zu gewährleisten, die PCI von Ihnen verlangt.

+0

Sache ist - Kartenverarbeitung Server IS sicher, mein Client (store) ist nicht (muss nicht sein) – Peter

+0

In der Tat: Wenn sie anfangen, Karten von ihnen zu stolpern, kann die Kartenfirma prüfen, dass Sie nach Antworten suchen. Halten Sie diese Art von alten Servern in einer Liste zusammengefasst. Als Gegenmaßnahme Sie können sie blockieren und zeigen, dass Sie ihnen auf dem Auditing helfen. – LeoPucciBr

3

Gibt es eine Problemumgehung, jede Option, wie TLSv1.1 + gesicherten Server ohne integrierte Bibliotheken verbinden?

kann ich von fünf Umgehungen denken: mehrere Versionen von OpenSSL (oder sogar Locken) installiert haben

1) Es ist möglich (aber schwierig). Sie können sogar LD_PRELOAD_LIBRARY verwenden, um eine vorhandene binäre Use-Bibliothek von einem anderen Ort aus zu erstellen. Ich denke, das ist ein chaotischer Weg, es zu tun.

2) Dies wäre mit Docker wirklich einfach. Leider benötigt es einen modernen Kernel, so dass Sie es wahrscheinlich nicht auf Ihrem Server installieren können. Sie können jedoch ein moderneres Betriebssystem installieren und Ihren Server anschließend in einem Docker-Container mit dem älteren Betriebssystem installieren. Aber das kann ungefähr genauso viel Arbeit sein wie das Verschieben Ihrer Website auf ein neueres Betriebssystem.

3) Anstelle von Docker verwenden Sie einfach chroot. Verwenden Sie in einer neueren Box "ldd", um alle Abhängigkeiten zu finden. Kopiere sie (plus Curl) in eine Chroot. Kopiere dieses Verzeichnis auf deinen Server und starte "chrooot dir curl". Die Binärdatei wird die neueren Bibliotheken sehen und funktionieren. Dies dauert nur ein paar Minuten für jemanden, der weiß, was sie tun.

4) Verwenden Sie eine statisch gelinkte Version von curl, die eine neuere OpenSSL in kompiliert hat.

5) Verwenden Sie ein Programm, das nicht OpenSSL nicht verwendet. Zum Beispiel verwenden einige go (lang) Programme ihre eigene Verschlüsselung und kompilieren zu einer statischen Binärdatei. Zum Beispiel: https://github.com/astaxie/bat

Die ersten 2 könnten in Ihrer Konfiguration ein wenig unpraktisch sein, aber jeder der letzten 3 funktioniert.

1

Ich habe bereits eine Antwort geschrieben, aber als ich in den Kommentaren gelesen, dass Sie keine Tools auf dem Server installieren können. Sie können die nativen PHP-Funktionen PHP Streams verwenden. Dies ist Codebeispiel für alte twitter API:

$url = 'https://api.twitter.com/1/statuses/public_timeline.json'; 
    $contextOptions = array(
     'ssl' => array(
      'verify_peer' => true, 
      'cafile'  => '/etc/ssl/certs/ca-certificates.crt', 
      'verify_depth' => 5, 
      'CN_match'  => 'api.twitter.com', 
      'disable_compression' => true, 
      'SNI_enabled'   => true, 
      'ciphers'    => 'ALL!EXPORT!EXPORT40!EXPORT56!aNULL!LOW!RC4' 
    ) 
); 
    $sslContext = stream_context_create($contextOptions); 
    $result = file_get_contents($url, NULL, $sslContext); 
+0

versuchte das an erster Stelle. php verwendet veraltete openssl ebenso – Peter

Verwandte Themen