rails mysql2:如何验证mysql服务器的SSL证书?

时间:2014-06-11 20:35:35

标签: ruby-on-rails ssl ssl-certificate mysql2

我正在尝试通过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_CERTflags: CLIENT_SSL_VERIFY_SERVER_CERTflags: 1073741824secure_auth: true

¹config / database.yml中的sslca: /path/to/cacert.pem?sslca=/path/to/cacert.pem网址中的mysql2://

2 个答案:

答案 0 :(得分:3)

使用mysql2>=0.4.0,您可以在适配器配置中设置sslverify: truesslca: 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)
    )

希望有所帮助!