6.7.2 在连接器/NET 中使用 PFX 证书

.NET 不提供对 PEM 格式的本机支持。相反,Windows 包含一个证书存储区,它提供 PFX 格式的平台相关证书。出于本示例的目的,使用来自 MySQL 服务器存储库 ( ./mysql-test/std_data) 的测试客户端证书。首先将这些转换为 PFX 格式。这种格式也称为 PKCS#12。

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

创建用于 .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. 当要求输入导出密码时,输入密码 passclient.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. You now have Certificates – Current User displayed in the left panel of the Microsoft Management Console. Expand the Certificates - Current User tree item and select Personal, Certificates. The right panel displays a certificate issued to MySQL that was previously imported. Double-click the certificate to display its details.

  7. After you have imported the certificate to the Personal Store, you can use a more succinct connection string to connect to the database, as illustrated by the following code:

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

Certificate Thumbprint Parameter

If you have a large number of certificates in your store, and many have the same Issuer, this can be a source of confusion and result in the wrong certificate being used. To alleviate this situation, there is an optional Certificate Thumbprint parameter that can additionally be specified as part of the connection string. As mentioned before, you can double-click a certificate in the Microsoft Management Console to display the certificate's details. When the Certificate dialog is displayed click the Details tab and scroll down to see the thumbprint. The thumbprint will typically be a number such as ‎47 94 36 00 9a 40 f3 01 7a 14 5c f8 47 9e 76 94 d7 aa de f0. This thumbprint can be used in the connection string, as the following code illustrates:

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

Spaces in the thumbprint parameter are optional and the value is not case-sensitive.