【问题标题】:rails mysql2: how to verify mysql server's SSL certificate?rails mysql2:如何验证 mysql 服务器的 SSL 证书?
【发布时间】:2014-08-02 01:16:55
【问题描述】:

我正在尝试通过 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,或mysql2:// URL 中的?sslca=/path/to/cacert.pem

【问题讨论】:

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


    【解决方案1】:

    使用mysql2>=0.4.0,您可以在适配器配置中设置sslverify: truesslca: path/to/cert_chain.pem,以使客户端验证服务器身份。

    【讨论】:

    【解决方案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)
        )
    

    希望有帮助!

    【讨论】:

    • 谢谢!将它与 Rails (4.1) 一起使用,我们在新文件 config/initializers/ssl_verify_server_cert.rb 中设置全局默认值,并且它正在正确验证。 (是否欢迎功能请求或拉取请求,以便可以在可以指定 sslca 的任何地方指定此标志?)
    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 2012-11-14
    • 2015-06-24
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2016-05-24
    • 2013-02-08
    相关资源
    最近更新 更多