.NET 不提供對 PEM 格式的本機支援。相反地,Windows 包含一個憑證存放區,其中提供 PFX 格式的平台相關憑證。為了此範例的目的,請使用 MySQL 伺服器儲存庫中的測試用戶端憑證 (./mysql-test/std_data
)。先將這些轉換為 PFX 格式。此格式也稱為 PKCS#12。
若要完成此 PFX 憑證教學課程中的步驟,您必須安裝 Open SSL。您可以從 Shining Light Productions 免費下載 Microsoft Windows 版本。
從目錄
,發出下列命令。server-repository-root
/mysql-test/std_dataopenssl 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();
}
指紋參數中的空格是可選的,且該值不區分大小寫。