文档首页
MySQL Connector/NET 开发者指南
相关文档 下载本手册

MySQL Connector/NET 开发者指南  /  ...  /  在 Connector/NET 中使用 PFX 证书

6.7.2 在 Connector/NET 中使用 PFX 证书

.NET 不提供对 PEM 格式的原生支持。相反,Windows 包含一个证书存储,提供 PFX 格式的平台依赖证书。在本示例中,使用来自 MySQL 服务器存储库的测试客户端证书 (./mysql-test/std_data)。首先将它们转换为 PFX 格式。此格式也称为 PKCS#12。

要完成本教程中有关 PFX 证书的步骤,您必须安装 Open SSL。可以从 Shining Light Productions 免费下载适用于 Microsoft Windows 的 Open SSL。

创建要与 .NET 客户端一起使用的证书文件

  1. 在目录 server-repository-root/mysql-test/std_data 中,发出以下命令。

    openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -certfile cacert.pem -out client.pfx
  2. 当系统要求输入导出密码时,请输入密码 pass。系统将生成文件 client.pfx。本教程的其余部分将使用此文件。

使用基于文件的证书连接到服务器

  1. 使用您在上一步中创建的 client.pfx 文件对客户端进行身份验证。以下示例演示如何使用 SslModeCertificateFileCertificatePassword 连接字符串选项进行连接。

    using (MySqlConnection connection = new MySqlConnection(
      "database=test;user=sslclient;" +
      "CertificateFile=H:\\git\\mysql-trunk\\mysql-test\\std_data\\client.pfx;" +
      "CertificatePassword=pass;" +
      "SslMode=Required "))
      
    {
        connection.Open();
    }

    需要更改证书文件的路径以反映您的个人安装。使用 PFX 格式证书时,SslMode 连接选项会验证所有 SSL 模式值的证书,但 DisabledNone(在 Connector/NET 8.0.29 中已弃用)除外。

使用基于存储的证书连接到服务器

  1. 第一步是将 PFX 文件 client.pfx 导入个人存储。在 Windows 资源管理器中双击该文件。这将启动证书导入向导。

  2. 按照向导指示的步骤操作,并在系统提示输入 PFX 文件的密码时,输入 pass

  3. 单击 完成 关闭向导并将证书导入个人存储。

检查个人存储中的证书

  1. 通过在命令提示符下输入 mmc.exe 启动 Microsoft 管理控制台。

  2. 文件 菜单中选择 添加/删除管理单元。单击 添加。从可用管理单元列表中选择 证书

  3. 在对话框中,单击 添加,然后选择 我的用户帐户 选项。此选项用于个人证书。

  4. 单击 完成

  5. 单击 确定 关闭“添加/删除管理单元”对话框。

  6. 现在,您会在 Microsoft 管理控制台的左侧面板中看到 证书 - 当前用户。展开“证书 - 当前用户”树项目,然后选择 个人证书。右侧面板显示之前导入的颁发给 MySQL 的证书。双击证书以显示其详细信息。

  7. 将证书导入个人存储后,您可以使用更简洁的连接字符串连接到数据库,如下面的代码所示

    using (MySqlConnection connection = new MySqlConnection(
       "database=test;user=sslclient;" +
       "Certificate Store Location=CurrentUser;" +
       "SslMode=Required"))
       
    {
       connection.Open();
    }

证书指纹参数

如果您的存储中有大量证书,并且许多证书具有相同的颁发者,这可能会导致混淆,并导致使用错误的证书。为了缓解这种情况,可以另外指定一个可选的证书指纹参数作为连接字符串的一部分。如前所述,您可以在 Microsoft 管理控制台中双击证书以显示证书的详细信息。显示“证书”对话框后,单击 详细信息 选项卡并向下滚动以查看指纹。指纹通常是一个数字,例如 ‎47 94 36 00 9a 40 f3 01 7a 14 5c f8 47 9e 76 94 d7 aa de f0。此指纹可以在连接字符串中使用,如下面的代码所示

using (MySqlConnection connection = new MySqlConnection(
      "database=test;user=sslclient;" +
      "Certificate Store Location=CurrentUser;" +
      "Certificate Thumbprint=479436009a40f3017a145cf8479e7694d7aadef0;"+
      "SSL Mode=Required"))
{
    connection.Open();
}

指纹参数中的空格是可选的,并且该值不区分大小写。