Po utworzeniu samopodpisanego certyfikatu SSL skonfigurowałem mój zdalny serwer MySQL, aby z nich korzystał (a protokół SSL jest włączony)
Przesyłam ssh do mojego zdalnego serwera i próbuję połączyć się z własnym mysqld za pomocą SSL (serwer MySQL to 5.5.25).
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Ok, pamiętam, że przeczytałem problem z połączeniem się z tym samym serwerem przez SSL. Więc pobieram klucze klienta do mojej skrzynki lokalnej i testuję stamtąd ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
Nie jest jasne, do czego odnosi się ten błąd „Błąd połączenia SSL”, ale jeśli go pominę -ssl-ca
, będę mógł połączyć się za pomocą SSL.
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
Uważam jednak, że jest to tylko szyfrowanie połączenia, a nie weryfikacja ważności certyfikatu (co oznacza, że byłbym potencjalnie narażony na atak man-in-middle)
Certyfikaty SSL są ważne (choć podpisane przez siebie) i nie zawierają hasła. Więc moje pytanie brzmi: co robię źle? Jak mogę połączyć się przez SSL, używając certyfikatu z podpisem własnym?
Wersja MySQL Server to 5.5.25, a serwer i klienci to CentOS 5.
Dziękuję za wszelkie porady
Edycja : Zauważ, że we wszystkich przypadkach polecenie jest wydawane z tego samego katalogu, w którym znajdują się klucze ssl (stąd brak ścieżki bezwzględnej)
Edycja (w odpowiedzi na mgorven): ca.cert
to certyfikat ośrodka certyfikacji, który powinien informować mysql, że mój ośrodek
certyfikacji jest zaufany.
Konfiguracja z my.cnf
jest
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
Próbowałem również dodać, ssl-cipher=DHE-RSA-AES256-SHA
ale od tego czasu go usunąłem, ponieważ nie pomogło.
ca.cert
? Czy jest to samopodpisany certyfikat serwera? Czy używasz certyfikatów klienta do uwierzytelniania? Podaj konfigurację związaną z SSL na serwerze.Odpowiedzi:
Tak, masz rację, że jeśli nie określisz,
--ssl-ca
klient w ogóle nie sprawdzi certyfikatu serwera. Ponieważ działa bez tej opcji, najbardziej prawdopodobną przyczyną niepowodzenia jest to, że klient nie ufa certyfikatowi serwera.Jeśli używasz samopodpisanych certyfikatów klienta i serwera,
ca.cert
plik powinien zawierać oba te pliki. W ten sposób klient będzie ufał certyfikatowi serwera, a serwer będzie ufał certyfikatowi klienta.Na przykład:
Wygeneruj klucz serwera i certyfikat:
Wygeneruj klucz klienta i certyfikat:
Połącz certyfikaty klienta i serwera w plik certyfikatów urzędu certyfikacji:
źródło
Aby użyć jednokierunkowego ssl, powinieneś spróbować z:
--ssl-cert
I--ssl-key
na kliencie mysql służą do 2 way SSL. Oznacza to uwierzytelnianie oparte na certyfikatach. Przedmiotem certyfikatu klienta powinna być nazwa użytkownika.źródło
--ssl-verify-server-cert
CN certyfikatu serwera musi być taki sam, jak host podany dla opcji wiersza polecenia -h.Czy przypadkiem nie wprowadziłeś tej samej nazwy zwyczajowej dla certyfikatów serwera i klienta? Jeśli tak, wymień jedną z nich, aby nazwy wspólne były różne.
źródło