Chcę, aby mój serwer WWW rozmawiał z serwerem bazy danych MySQL przez połączenie SSL. Serwer WWW działa CentOS5, serwer bazy danych działa FreeBSD. Certyfikaty są dostarczane przez pośredni CA DigiCert.
MySQL powinien używać ssl, zgodnie z my.cnf
:
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
ssl
ssl-capath = /opt/mysql/pki/CA
ssl-cert = /opt/mysql/pki/server-cert.pem
ssl-key = /opt/mysql/pki/server-key.pem
Kiedy uruchamiam MySQL, demon uruchamia się bez błędów. Sugeruje to, że wszystkie pliki certyfikatów są czytelne.
Ale kiedy próbuję połączyć się z serwera WWW z serwerem bazy danych, pojawia się błąd:
[root@webserver ~]# mysql -h mysql.example.org -u user -p
ERROR 2026 (HY000): SSL connection error
A jeśli spróbuję dalej debugować za pomocą openssl:
[root@webserver ~]# openssl s_client -connect mysql.example.org:3306 0>/dev/null
CONNECTED(00000003)
15706:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588:
Czy to prawidłowy sposób przetestowania połączenia SSL z serwerem bazy danych MySQL? SSL23_GET_SERVER_HELLO:unknown protocol
Wiadomość jest dziwne, ponieważ zazwyczaj, co można sprawdzić, czy mówili SSL na porcie przeznaczonej dla ruchu non-SSL.
Ta sama komenda openssl wydaje się działać dobrze z serwerami LDAP i HTTP:
$ openssl s_client -connect ldap.example.org:636 0>/dev/null
CONNECTED(00000003)
depth=2 /C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
...
$ openssl s_client -connect www.example.org:443 0>/dev/null
CONNECTED(00000003)
depth=0 /DC=org/DC=example/OU=Services/CN=www.example.org