您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)ASP.NET使用X509Certificate2出現(xiàn)的問題有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在做微信支付退款的時(shí)候,由于需要使用到p12證書,結(jié)果就遇到一系列的坑。這里做個(gè)記錄方便以后查閱。
原先加載證書的代碼:
1 X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);2 Request.ClientCertificates.Add(cert);
在vs 上測試通過。但是部署到IIS上一直報(bào)這個(gè)問題:
System.Security.Cryptography.CryptographicException: 系統(tǒng)找不到指定的文件。
詳細(xì)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)。
反復(fù)測試之后,確認(rèn)不是代碼跟文件路徑的問題。在查詢微軟的文檔后發(fā)現(xiàn)了相關(guān)說明,指明了問題所在,以下分享一下我的操作流程。
1.將證書安裝上去
點(diǎn)擊 [開始] -> [運(yùn)行] -> 鍵入[mmc] 進(jìn)入“控制臺”界面 -> 選擇[文件] -> [添加/刪除管理單元](Ctrl+M)
選擇 [證書] -> [計(jì)算機(jī)賬戶] -> [下一步] -> [完成]
選擇 [證書] -> [導(dǎo)入]
導(dǎo)入你的證書文件
2.授權(quán)證書
先安裝 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賬號標(biāo)識"
-g 指令 就是授權(quán)
-c 是指證書所在的存儲區(qū)
另外,證書的名稱就是這個(gè),如圖所示 而不是其他什么東西,我就是搞錯(cuò)了,點(diǎn)擊這個(gè)證書的詳情取了里面的名稱,導(dǎo)致授權(quán)不成功。
而iis賬號標(biāo)識,是指站點(diǎn)對應(yīng)的應(yīng)用程序池,高級設(shè)置里有標(biāo)識這個(gè)選項(xiàng)來選擇對應(yīng)的用戶。當(dāng)時(shí)我授權(quán)的標(biāo)識是Network Service,而應(yīng)用程序池中的標(biāo)識ApplicationPoolIdentity,結(jié)果導(dǎo)致我發(fā)起請求時(shí)出現(xiàn)了:
System.Net.WebException: 請求被中止: 未能創(chuàng)建 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];
再測試一下,終于成功!
關(guān)于“ASP.NET使用X509Certificate2出現(xiàn)的問題有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。