Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połączenia PHP do MySQL SSL

Tutaj PHP (i mysqli_real_connect ) to klient, a nie serwer. Konfigurujesz go za pomocą mysqli_ssl_set do uwierzytelniania klienta za pomocą certyfikatu (oraz używania klucza i certyfikatu serwera).

Nie jestem pewien, jak skonfigurowałeś serwer MySQL, ale powinno być coś takiego w sekcji konfiguracji serwera (MySQL):

ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem

I tak nie należą one do klienta (tylko certyfikat CA, ale na pewno nie klucz prywatny serwera).

Gdy to zrobisz, możesz spróbować sprawdzić, czy serwer jest poprawnie skonfigurowany za pomocą klienta wiersza poleceń:

mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

a może to (chociaż weryfikacja certyfikatu serwera powinna być naprawdę włączona, aby SSL/TLS było przydatne)

mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

Powinno to działać przynajmniej w wierszu poleceń.

Następnie z PHP masz dwie opcje:

  • użyj mysqli_ssl_set tak jak zrobiłeś, ale zostawiając $key i $cert null, chyba że chcesz użyć certyfikatu klienta, który tak naprawdę powinien różnić się od certyfikatu serwera. (Nie pamiętam, czy to działa).
  • prawdopodobnie łatwiej, pomiń mysqli_ssl_set całkowicie i skonfiguruj to w swoim globalnym pliku konfiguracyjnym klienta MySQL (gdzie PHP powinno być w stanie go pobrać, prawdopodobnie /etc/mysql/my.cnf , ale może się to różnić w zależności od dystrybucji):

    [client]
    ssl-ca=/mysql-ssl-certs/ca-cert.pem
    

(Jest to podobne do konfiguracji serwera, ale po stronie klienta/w sekcji klienta).

Dla części autoryzacyjnej (GRANT ):

  • REQUIRE SSL wymaga jedynie użycia SSL/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT i REQUIRE X509 wymagać od klienta przedstawienia certyfikatu klienta w celu porównania z wymaganymi wartościami (jest to przypadek, w którym musisz użyć ssl-key i ssl-cert po stronie klienta (config lub w mysqli_ssl_set ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcja SQL At-Sign in przed nazwą kolumny

  2. Wybierz 10 najlepszych rekordów dla każdej kategorii w MySQL

  3. Rekord MySQL, który podlegałby TTL

  4. Java i SQL :zwróć null lub wyrzuć wyjątek?

  5. Double JOIN z tym samym stołem dwa razy