2015-08-05 11 views
17

Sto provando a impostare una connessione SSL a un database MySQL ospitato tramite Amazon RDS. Sono confuso su come connettersi.Come connettersi ad Amazon RDS via SSL?

Secondo Amazon documentation, ho bisogno di scaricare un certificato CA chiamato "rds-ca-2015-root.pem" e usarlo nella mia connessione SSL. Imposta l'utente del database con cui mi sto connettendo per richiedere SSL.

In PHP, ho includono il codice sottostante per avviare la connessione:

$mysqli = mysqli_init(); 
mysqli_options($mysqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); 
$mysqli->ssl_set(NULL, NULL, "/path/to/pem", NULL, NULL); 
$mysqli->real_connect("host", "username", "password", "name", 3306, NULL, MYSQLI_CLIENT_SSL); 

Tuttavia, non importa quale percorso a specificare come terzo parametro in ssl_set() (anche se il percorso non è valido) , una connessione SSL è stata stabilita con successo. Il terzo parametro non può essere impostato su NULL.

Si verifica eseguendo questa query: SHOW STATUS LIKE 'Ssl_cipher';. L'output verifica che la connessione sia crittografata (Ssl_cipher => AES256-SHA).

Qualcuno potrebbe spiegarmi come funziona? Sono confuso sul motivo per cui la connessione continua a funzionare correttamente quando il percorso non è corretto. Come viene verificato il server RDS?

+1

Se si sta eseguendo questo su una macchina Unix in base al gusto e alla configurazione di OpenSSL che si sta utilizzando, esiste una directory che contiene i certificati di sistema. Openssl guarderà a quel percorso per un certificato appropriato. Ciò che non è chiaro qui è (assumendo che tu sia su una macchina Unix) indipendentemente dal fatto che tu abbia inserito o meno la tua cert in quella directory. Se hai fatto una connessione di successo devi avere. È possibile ottenere ulteriori informazioni su posizioni di directory specifiche qui: http://serverfault.com/questions/62496/ssl-certificate-location-on-unix-linux – mba12

+0

qual è il PHP? – cerd

+2

Ho fatto un bel po 'di test qui (da un'istanza EC2) e sembra che la linea che imposta il percorso della chiave pubblica PEM non sia nemmeno richiesta, né le linee per includere il PEM dai documenti AWS per la connessione tramite la riga di comando. Ciò implica che @ mba12 è corretto in quanto i certificati RDS devono già esistere nell'istanza da qualche parte e non è necessario fare riferimento. Se li riferimento in modo errato allora sì, si rompe. Stai provando questo fuori da un VPC AWS? –

risposta

2

La documentazione di RDS in realtà spiega perché questo sta accadendo, e suggerisce che non è nemmeno necessario il certificato CA:

Amazon RDS iniziato l'aggiornamento dei certificati SSL su tutte le istanze DB il 23 MARZO 2015 , ma non ha avviato il riavvio delle istanze. No impatto operativo o tempi di inattività si verificano quando questi aggiornamenti sono eseguiti, e in molte situazioni eseguiremo l'aggiornamento nella finestra di manutenzione . Amazon RDS non aggiornerà il certificato per istanze se hai già eseguito l'aggiornamento. Nota anche che Amazon RDS non sta aggiornando i certificati nelle regioni AWS GovCloud (USA) e Cina (Pechino).

Indipendentemente dal fatto che si aggiorna manualmente il certificato o Amazon RDS aggiornato il certificato, il DB di istanza deve essere riavviato per il nuovo certificato abbiano effetto. Si può decidere se si desidera riavviare manualmente il DB di istanza, ma è necessario aggiornare il certificato e riavviare l'istanza prima che il vecchio certificato (RDS-ca-2010) scade il 3 aprile 2015.

Puoi controllare l'autorità di certificazione (CA) utilizzata dall'istanza DB utilizzando la console di Amazon RDS. La CA è elencata nella sezione Protezione e rete dei dettagli dell'istanza DB. Se l'istanza mostra rds-ca-2015, il nuovo certificato è stato applicato correttamente. È comunque necessario riavviare l'istanza del database e aggiornare l'applicazione client per utilizzare il nuovo certificato SSL.

Se la console Amazon RDS mostra la CA di istanza come rds-ca-2010, quindi il nuovo certificato non è stato ancora applicato all'istanza del database . Utilizzare le seguenti istruzioni per aggiornare il certificato SSL su istanze del database.

Il terzo parametro viene essenzialmente ignorato dal client. Sto scommettendo impostando il 3 ° parametro su NULL, non ha senso chiamare mysqli::ssl_set() se tutti i parametri sono nulli.

Provare a rimuovere del tutto quella chiamata di funzione.

Problemi correlati