ASP.NET使用X509Certificate2出現的一些問題的解決方案分享

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了ASP.NET使用X509Certificate2出現一系列問題的解決方案,具有一定的參考價值,感興趣的小夥伴們可以參考一下

在做支付退款的時候,由於需要使用到p12認證,結果就遇到一系列的坑。這裡做個記錄方便以後查閱。

原先載入認證的代碼:

複製代碼 代碼如下:

1 X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);2 Request.ClientCertificates.Add(cert);

在vs 上測試通過。但是部署到IIS上一直報這個問題:

複製代碼 代碼如下:

System.Security.Cryptography.CryptographicException: 系統找不到指定的檔案。

詳細Stack Trace資訊:

在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
在 TenpayCore.HttpService.Post(TenpayException& tpEx, Byte[] xml, String url, Boolean isUseCert, Int32 timeout)。

反覆測試之後,確認不是代碼跟檔案路徑的問題。在查詢微軟的文檔後發現了相關說明,指明了問題所在,以下分享一下我的操作流程。

1.將認證安裝上去

點擊 [開始] -> [運行] -> 鍵入[mmc] 進入“控制台”介面 -> 選擇[檔案] -> [添加/刪除嵌入式管理單元](Ctrl+M)

選擇 [認證] -> [電腦賬戶] -> [下一步] -> [完成]

選擇 [認證] -> [匯入]

匯入你的認證檔案

2.授權認證

先安裝 winhttpcertcfg.exe 工具(Windows HTTP Services Certificate Configuration Tool)。安裝完成之後在該工具在C:\Program Files (x86)\Windows Resource Kits\Tools 或者C:\Program Files\Windows Resource Kits\Tools 檔案夾下。開啟cmd鍵入命令:

複製代碼 代碼如下:

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "你的認證名稱" -a "你的iis帳號標識"

-g 指令 就是授權

-c 是指認證所在的儲存區

另外,認證的名稱就是這個, 而不是其他什麼東西,我就是搞錯了,點擊這個認證的詳情取了裡面的名稱,導致授權不成功。

而iis帳號標識,是指網站對應的應用程式集區,進階設定裡有標識這個選項來選擇對應的使用者。當時我授權的標識是Network Service,而應用程式集區中的標識ApplicationPoolIdentity,結果導致我發起請求時出現了:

複製代碼 代碼如下:

System.Net.WebException: 請求被中止: 未能建立 SSL/TLS 安全通道。

3.修改代碼

做完這些配置之後修改一下之前載入認證的代碼。

複製代碼 代碼如下:

1 X509Store store = new X509Store("My", StoreLocation.LocalMachine);2 store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);3 4 System.Security.Cryptography.X509Certificates.X509Certificate2 cert = 5 store.Certificates.Find(X509FindType.FindBySubjectName, "你的認證名稱", false)[0];

再測試一下,終於成功!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.