2015-05-15 7 views
8

Sono in questa spiacevole situazione:è possibile effettuare il POST/GET di dati su TLSv1.1 + sito protetto senza arricciare e wget?

  • Il mio sito è utilizzando software obsoleti (patch di sicurezza vengono applicate) con OpenSSL 0.9.8o 1 giugno 2010 che non supporta TLSv1.1/1.2
  • I hanno anche gateway di pagamento che è PCI DSS quindi SSL e TLS precoce è disabilitata ci

mio sito utilizzato per lo scambio dati con gateway di pagamento, ma come è caduto TLSv1.0 non posso più utilizzare libreria cURL PHP o addirittura file_get_contents() (o wget/lynx/curl via shell)

Esiste una soluzione alternativa, qualsiasi opzione su come collegare il server protetto TLSv1.1 + senza utilizzare le librerie incorporate?

So che alcune classi esiste in PHP come phpseclib che è client SSH, grande per le persone che non possono utilizzare SSH2 module

fa qualcosa di simile esiste per PHP? C'è un modo per connettermi al mio gateway?

Finora la mia idea migliore è la connessione al gateway attraverso un altro server (con software aggiornato)

+0

Sei bloccato con l'utilizzo di librerie incorporate o puoi installarne altre in userspace? – Marek

+0

@Marek non posso usare librerie PHP integrate, lynx, wget, arricciare a causa del vecchio openssl lib – Peter

+0

So che, stavo chiedendo se è possibile installare librerie e programmi aggiuntivi in ​​userspace, cioè '$ HOME/bin' – Marek

risposta

0

Ho trovato un'altra soluzione.

Sul server sicuro ho creato due VirtualHosts - 443 per TLSv1.2 e un altro per il mio sito web solo con il supporto TLSv1.0

Maggiori informazioni qui: https://serverfault.com/a/692894/122489

Grazie per tutte le risposte.

2

mi piaceva la vostra idea iniziale di proxy a un altro server tranne che si eludano le restrizioni di sicurezza imposte dal gateway, e quando si tratta con le informazioni di pagamento, probabilmente non è un'idea.

Tuttavia, se è possibile eseguire un'istanza di Vagrant sul proprio server con librerie aggiornate, è possibile eseguire il proxy della richiesta non sicura sull'istanza di Vagrant su localhost e non lasciare la casella, quindi dall'istanza di Vagrant che ha aggiornato le librerie fare la comunicazione sicura al tuo gateway.

+0

o forse basta usare un semplice apache/nginx su un'altra porta sulla stessa macchina? – Hafenkranich

4

Una volta ho usato utility chiamata stunnel per il mio cliente non-TLS, citazione dal sito web:

Stunnel è un proxy progettato per aggiungere funzionalità di crittografia TLS per i client ei server esistenti senza alcuna modifica nel codice dei programmi . La sua architettura è ottimizzata per la sicurezza, la portabilità e la scalabilità (incluso il bilanciamento del carico), rendendola idonea per grandi implementazioni.

+0

Ho usato un altro approccio (vedi risposta fatta da me) ma immagino che stunnel possa funzionare anche tu. Quindi la taglia va da te, grazie – Peter

1

Stavo per suggerire Stunnel. MA Dafyc ha notato bene.

Queste restrizioni PCI non sono implementate per rallentare le persone (solo .. lol). Esiste per protezione.

Risolverai il tuo problema con Stunnel. Ma perché non aggiornare il server del sito web?

Hai individuato la scadenza SSL, ma come server, saranno disponibili diversi altri bug.

Se esplorano altri punti deboli e ottengono l'accesso come root, avranno una password stunnel per iniziare a esplorare cosa c'è nella pipe.

Quindi questo non sembra abbastanza buono per assicurare l'affidabilità che PCI vuole che tu abbia.

+0

la cosa è: il server di elaborazione delle carte è sicuro, il mio cliente (store) non è (non deve essere) – Peter

+0

Infatti, se iniziano a rubare carte da loro, la società di carte può controllarti cercando risposte.Tenete questo tipo di server vecchi raggruppati in un elenco. puoi bloccarli e mostrare che li stai aiutando nell'auditing. – LeoPucciBr

3

Esiste una soluzione alternativa, qualsiasi opzione su come collegare il server protetto TLSv1.1 + senza utilizzare le librerie incorporate?

mi viene in mente cinque work-around:

1) E 'possibile (ma difficile) di avere più versioni di OpenSSL (o anche Curl) installato. È anche possibile utilizzare LD_PRELOAD_LIBRARY per creare una libreria di utilizzo binario esistente da un'altra parte. Penso che questo sia un modo disordinato per farlo.

2) Ciò sarebbe molto semplice con Docker. Sfortunatamente, richiede un kernel moderno, quindi probabilmente non puoi installarlo sul tuo server. Ma è possibile installare un sistema operativo più moderno, quindi installare il server in un contenitore Docker con il sistema operativo precedente. Ma questo potrebbe comportare tanto lavoro quanto lo spostamento del sito Web in un sistema operativo più recente.

3) Invece di Docker, utilizzare solo chroot. Su una casella più recente, usa "ldd" per trovare tutte le dipendenze. Copiali (più arricciatura) in un chroot. Copia quella dir sul tuo server ed esegui "chrooot dir curl". Il file binario vedrà le nuove librerie e funzionerà. Ci vorranno solo pochi minuti per configurare qualcuno che sa cosa stanno facendo.

4) Utilizzare una versione statico-linked di ricciolo che ha un OpenSSL recente compilato.

5) Utilizzare un programma che non utilizza OpenSSL. Ad esempio alcuni programmi go (lang) usano la propria crittografia e compilano un binario statico. Ad esempio: https://github.com/astaxie/bat

Il primo 2 potrebbe essere un po 'poco pratico nella configurazione, ma uno degli ultimi 3 funzionerà.

1

Ho già inviato una risposta, ma ho letto nei commenti che non è possibile installare alcun strumento sul server. È possibile utilizzare le funzioni native PHP denominate PHP Streams. Questo è un esempio di codice per la vecchia API di Twitter:

$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

lo ha provato in primo luogo. php usa anche openssl obsoleto – Peter