使用CA证书连接MySQL配置?

问题描述 投票:0回答:1

我正在使用 mysqlkit 进行 Vapor 服务器端项目,并用于配置 MySQL,如下所示:

let config = MySQLConfiguration(hostname: "127.0.0.1", port: 3306, username: "root", password: "s3#12412r657f", database: "Admin", tlsConfiguration: nil)

已成功连接本地数据库。现在,我有了用于远程数据库的 SSL

CA
文件(SSL 证书颁发机构文件)。

在 mysql 工作台中,我在 SSL 选项卡SSL 证书颁发机构文件路径字段中选择了 ca_cert.crt 文件。效果很好!

但我不知道如何配置 TLS 或将我的

cacertificate.crt
文件放在哪里&我已经测试过 crt 文件仅为 PEM 格式。

static let prod: MySQLConfiguration = {
    
    var tls = TLSConfiguration.makeClientConfiguration()
      
    do {

        let bytes = [UInt8]("""
        -----BEGIN CERTIFICATE-----
        EX_CERTIFICATE_STRINGS...
        -----END CERTIFICATE-----
        """.data(using: .utf8)!)
        let cert: NIOSSLCertificate = try .init(bytes: bytes, format: .pem)
        tls.certificateChain = [.certificate(cert)]
        tls.privateKey = nil
        let config = MySQLConfiguration(hostname: "192.65.85.577", port: 3658, username: "testadmin", password: "dd#246$@erjt!df^67", database: "Elevate", tlsConfiguration: tls)
        return config
        
    } catch {
        
        fatalError("DB SSL CA Error: \(error.localizedDescription)")
    }
}()

当我查询数据库时,我收到错误消息,

{
    "error": true,
    "reason": "handshakeFailed(NIOSSL.BoringSSLError.sslError([Error: 268435581 error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED at /Users/At4/Library/Developer/Xcode/DerivedData/Elevate-xcftyy3423/SourcePackages/checkouts/swift-nio-ssl/Sources/CNIOBoringSSL/ssl/handshake.cc:393]))"
}

但是相同的证书和其他参数可以在 MySQLWorkBench 上正常工作。

swift ubuntu vapor
1个回答
0
投票

crt 应分配给

trustRoots

tls.certificateVerification = .fullVerification
tls.trustRoots = .certificates([cert])

或者证书链但没有验证

tls.certificateVerification = .none
tls.certificateChain = .certificates([cert])

两者都有效,我选择了

trustRoots
,但仍然不确定这是正确还是错误。

© www.soinside.com 2019 - 2024. All rights reserved.