Tôi muốn máy chủ web của tôi nói chuyện với máy chủ cơ sở dữ liệu MySQL qua kết nối SSL. Máy chủ web chạy CentOS5, Máy chủ cơ sở dữ liệu chạy FreeBSD. Các chứng chỉ được cung cấp bởi một CA DigiCert trung gian.
MySQL nên được sử dụng ssl, theo 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
Khi tôi khởi động MySQL, trình nền bắt đầu không có lỗi. Điều này cho thấy rằng các tập tin chứng chỉ đều có thể đọc được.
Nhưng khi tôi cố gắng kết nối từ máy chủ web đến máy chủ cơ sở dữ liệu, tôi gặp lỗi:
[root@webserver ~]# mysql -h mysql.example.org -u user -p
ERROR 2026 (HY000): SSL connection error
Và nếu tôi cố gắng gỡ lỗi thêm với 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:
Đây có phải là cách hợp lệ để kiểm tra kết nối SSL đến máy chủ cơ sở dữ liệu MySQL không? Các SSL23_GET_SERVER_HELLO:unknown protocol
thông điệp là lạ vì đây thường những gì bạn sẽ thấy nếu bạn đang nói SSL trên một cổng dành cho giao thông không tuân thủ SSL.
Lệnh openssl tương tự này dường như hoạt động tốt với các máy chủ LDAP & 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