我正在尝试通过SSL远程连接到mysql数据库,验证服务器的证书与用于连接服务器的DNS域匹配。
使用命令行mysql
工具,我可以使用mysql --ssl-ca=/path/to/cacert.pem --ssl-verify-server-cert
建立此类连接。
使用rails mysql2,我设置了sslca:
¹,这导致了mysql --ssl-ca=
之类的未经完全验证的SSL连接。如何在服务器证书的域错误的情况下进行连接失败,如何进行等效的--ssl-verify-server-cert
?
我尝试添加以下内容对此问题没有影响:flags: SSL_VERIFY_SERVER_CERT
,flags: CLIENT_SSL_VERIFY_SERVER_CERT
,flags: 1073741824
和secure_auth: true
。
¹config / database.yml中的sslca: /path/to/cacert.pem
或?sslca=/path/to/cacert.pem
网址中的mysql2://
答案 0 :(得分:3)
使用mysql2>=0.4.0
,您可以在适配器配置中设置sslverify: true
和sslca: path/to/cert_chain.pem
,以使客户端验证服务器身份。
答案 1 :(得分:2)
这不是Mysql2 gem中的默认连接标志之一,但该常量可用,并且可以在建立连接之前按位OR-ed进入连接标志字段。
您可以像这样设置全局默认值:
Mysql2::Client::default_query_options[:connect_flags] |=
Mysql2::Client::SSL_VERIFY_SERVER_CERT
或者为每个连接设置标志:
client = Mysql2::Client.new(
:connect_flags => (Mysql2::Client::default_query_options[:connect_flags]
| Mysql2::Client::SSL_VERIFY_SERVER_CERT)
)
希望有所帮助!