2015-08-05 8 views
17

Próbuję skonfigurować połączenie SSL z bazą danych MySQL hostowaną przez Amazon RDS. Nie wiem, jak się połączyć.Jak połączyć się z Amazon RDS przez SSL?

Zgodnie z documentation Amazon, muszę pobrać certyfikat CA o nazwie "rds-ca-2015-root.pem" i używać go w moim połączeniu SSL. Ustawiam użytkownika bazy danych, z którym się łączę, aby wymagać SSL.

W PHP I to poniższy kod, aby zainicjować połączenie:

$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); 

Jednak bez względu na to, która ścieżka określić jako trzeci parametr w ssl_set() (nawet jeśli ścieżka jest nieprawidłowa) , nawiązano połączenie SSL. Trzeci parametr nie może być ustawiony na NULL.

Weryfikuję to, uruchamiając to zapytanie: SHOW STATUS LIKE 'Ssl_cipher';. Dane wyjściowe weryfikują, czy połączenie jest szyfrowane (Ssl_cipher => AES256-SHA).

Czy ktoś mógłby mi wyjaśnić, jak to działa? Nie rozumiem, dlaczego połączenie nadal działa poprawnie, gdy ścieżka jest niepoprawna. W jaki sposób jest weryfikowany serwer RDS?

+1

Jeśli używasz tego na maszynie uniksowej w zależności od smaku i konfiguracji OpenSSL, którego używasz, istnieje katalog przechowujący certyfikaty systemowe. Openssl będzie szukać tej ścieżki dla odpowiedniego certyfikatu. Nie jest tu jednak jasne, (zakładając, że jesteś na komputerze unixowym), czy umieściłeś swój certyfikat w tym katalogu. Jeśli udało ci się nawiązać połączenie, musisz to zrobić. Możesz uzyskać więcej informacji o określonych lokalizacjach katalogów tutaj: http://serverfault.com/questions/62496/ssl-certificate-location-on-unix-linux – mba12

+0

co to jest PHP? – cerd

+2

Zrobiłem sporo testów tutaj (z EC2) i wygląda na to, że linia, która ustawia ścieżkę klucza publicznego PEM, nie jest nawet wymagana, ani linie do włączenia PEM z dokumentów AWS do połączenia przez linię poleceń. Oznacza to, że @ mba12 jest poprawny, ponieważ certyfikaty RDS muszą istnieć w instancji już gdzieś i nie muszą być przywoływane. Jeśli odwołam się do nich niepoprawnie, tak, to się psuje. Czy testujesz to spoza VS AWS? –

Odpowiedz

2

Dokumentacja RDS faktycznie wyjaśnia, dlaczego tak się dzieje, i sugeruje, że nie trzeba nawet cert Kalifornia:

Amazon RDS rozpoczął aktualizację certyfikatów SSL na wszystkich instancji DB na 23 marca 2015 , ale nie zainicjował ponownego uruchomienia instancji. Nie ma żadnego wpływu operacyjnego ani przestojów podczas wykonywania tych aktualizacji, a w wielu sytuacjach wykonamy aktualizację w oknie konserwacji . Amazon RDS nie zaktualizuje Twojego certyfikatu o swoich instancji, jeśli już wykonałeś aktualizację. Należy również pamiętać, że Amazon RDS nie aktualizuje certyfikatów w usłudze AWS GovCloud (USA) i regionach Chin (Pekin).

Bez względu na to, czy ręcznie zaktualizowano certyfikat, czy też Amazon RDS zaktualizował certyfikat, instancja bazy danych musi zostać ponownie uruchomiona, aby nowy certyfikat mógł zostać zastosowany do nowego certyfikatu . Możesz zdecydować, kiedy chcesz ręcznie ponownie uruchomić instancję DB, ale trzeba zaktualizować certyfikat i ponownie uruchom instancję przed starego świadectwa (RDS-ca-2010) wygasa w dniu 3 kwietnia 2015 r

Można sprawdź urząd certyfikacji (CA) używany przez instancję DB za pomocą konsoli Amazon RDS. Urząd certyfikacji znajduje się w sekcji Zabezpieczenia i sieć szczegółów instancji bazy danych w sekcji . Jeśli twoja instancja pokazuje rds-ca-2015, to nowy certyfikat został pomyślnie zastosowany: . Nadal musisz zrestartować instancję bazy danych i zaktualizować aplikację kliencką, aby używać nowego certyfikatu SSL.

Jeśli konsola Amazon RDS pokazuje CA instancji jako rds-ca-2010, to nowy certyfikat nie został jeszcze zastosowany do instancji bazy danych . Użyj poniższych instrukcji, aby zaktualizować certyfikat SSL w instancjach bazy danych na .

Trzeci parametr jest zasadniczo ignorowany przez klienta. Obstawiam, ustawiając trzeci parametr na NULL, nie ma sensu dzwonić pod numer mysqli::ssl_set(), jeśli wszystkie parametry są zerowe.

Spróbuj całkowicie usunąć to wywołanie funkcji.