首頁  >  文章  >  後端開發  >  ASP.NET使用X509Certificate2出現的一些問題的解決方法分享(圖)

ASP.NET使用X509Certificate2出現的一些問題的解決方法分享(圖)

黄舟
黄舟原創
2017-05-21 11:27:494396瀏覽

這篇文章主要為大家詳細介紹了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._LoadCertFrom##fFile#ffrom##fFile#(Pfile,#Pfile UInt32 dwFlags, Boolean persist
KeySet, SafeCertContextHandle& pCertCtx)在System.Security.Cryptography.X509CertificNameates.X509Certificate.LoadertificateFfileificateF. Object password, X509KeyStorageFlags keyStorageFlags)在System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)在TenServicepayCore.Http. ]
xml, String url, Boolean isUseCert, Int32 time
out)。
反覆測試之後,確認不是程式碼跟檔案路徑的問題。在查詢微軟的文件後發現了相關說明,指明了問題所在,以下分享我的作業流程。

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];

再测试一下,终于成功!

以上是ASP.NET使用X509Certificate2出現的一些問題的解決方法分享(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn