.NET 不提供对 PEM 格式的原生支持。相反,Windows 包含一个证书存储,提供 PFX 格式的平台依赖证书。在本示例中,使用来自 MySQL 服务器存储库的测试客户端证书 (./mysql-test/std_data)。首先将它们转换为 PFX 格式。此格式也称为 PKCS#12。
要完成本教程中有关 PFX 证书的步骤,您必须安装 Open SSL。可以从 Shining Light Productions 免费下载适用于 Microsoft Windows 的 Open SSL。
- 在目录 - server-repository-root/mysql-test/std_data- openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -certfile cacert.pem -out client.pfx
- 当系统要求输入导出密码时,请输入密码 “pass”。系统将生成文件 - client.pfx。本教程的其余部分将使用此文件。
- 使用您在上一步中创建的 - client.pfx文件对客户端进行身份验证。以下示例演示如何使用- SslMode、- CertificateFile和- CertificatePassword连接字符串选项进行连接。- 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 模式值的证书,但- Disabled或- None(在 Connector/NET 8.0.29 中已弃用)除外。
- 第一步是将 PFX 文件 - client.pfx导入个人存储。在 Windows 资源管理器中双击该文件。这将启动证书导入向导。
- 按照向导指示的步骤操作,并在系统提示输入 PFX 文件的密码时,输入 “pass”。 
- 单击 关闭向导并将证书导入个人存储。 
- 通过在命令提示符下输入 - mmc.exe启动 Microsoft 管理控制台。
- 从 菜单中选择 。单击 。从可用管理单元列表中选择 证书。 
- 在对话框中,单击 ,然后选择 我的用户帐户 选项。此选项用于个人证书。 
- 单击 。 
- 单击 关闭“添加/删除管理单元”对话框。 
- 现在,您会在 Microsoft 管理控制台的左侧面板中看到 证书 - 当前用户。展开“证书 - 当前用户”树项目,然后选择 个人、证书。右侧面板显示之前导入的颁发给 MySQL 的证书。双击证书以显示其详细信息。 
- 将证书导入个人存储后,您可以使用更简洁的连接字符串连接到数据库,如下面的代码所示 - 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();
}指纹参数中的空格是可选的,并且该值不区分大小写。