【茶包射手日記】憑證儲存區的選擇

栏目: ASP.NET · 发布时间: 6年前

上週的SSL 憑證茶包還有下集。

經手動匯入 TWCA 憑證,IE/Chrome 連上目標 HTTPS 網頁已正常,但呼叫廠商 API 的 .NET 服務程式仍冒出 Could not establish trust relationship for SSL/TLS secure channel 錯誤(明顯為憑證無效問題),改跑廠商提供的 API 範例,該程式使用 ALT COM+ ,在開發機執行正常,在問題主機執行卻久久無回應。詭異的是,將有錯程式片段複製到 LINQPad 執行或包進 Console Application 測試卻是正常。

實測加上 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 可鋸箭解決,但沒挖到真相不甘心,也擔心沒找出問題根源不知其所以然,未來會被同一來源的變種茶包咬到不知所措,帶上裝備繼續搜索。

使用 Wireshark 側錄廠商 API 範例封包找到一條線索,網站傳回 SSL 憑證後,客戶端回傳 Unknown CA 錯誤,而除此之外範例程式並未嘗試連線任何外部主機,而是直接判定憑證無效,推測與 CRL/OCSP 無關。

【茶包射手日記】憑證儲存區的選擇

此時同事也傳來另一則重要情資 - 程式碼放在 Windows Service 裡執行才會出錯,解釋了相同程式碼改用 Console Application 跑就沒問題的原因。

綜合兩項線索,我心中浮現嫌犯 - 是執行身分!

手動匯入 CA 憑證時,UI 有兩個選項:目前使用者、本機電腦,先前依直覺選了目前使用者,所以根憑證被安裝到目前登入使用者的憑證儲存區,而該 .NET 寫的 Windows Service 執行身分為 LOCAL SYSTEM,找不到根憑證很合理,因此判定 SSL/TLS 憑證無效拒絕連線。API 範例程式連線時出現 Unknown CA,推測也是找不到根憑證造成。

【茶包射手日記】憑證儲存區的選擇

改將憑證安裝到本機電腦,問題果然就解決了。

另外補充一點,經驗中「自動根據憑證類型來選取憑證存放區」有時會放錯地方,手動選取「受信任的根憑證授權單位」較保險。

【茶包射手日記】憑證儲存區的選擇

而過程還多學到一些冷知識:使用 MMC 新增憑證嵌入式管理單元時,除了「我的使用者帳戶」及「電腦帳號」外,還有一個「服務帳戶」選項:

【茶包射手日記】憑證儲存區的選擇

會列出機器上所有服務清單供你挑選:

【茶包射手日記】憑證儲存區的選擇

意味著 Windows 允許為每個服務個別安裝設定憑證:

【茶包射手日記】憑證儲存區的選擇

不過,如無特別考量,裝在本機電腦(電腦帳號)全機適用是較省事的做法。

最後補充一點,本次案例需安裝的 TWCA 憑證有兩張:TWCA Root Certification Authority、TWCA Global Root CA,兩張都要匯入。參考:保哥文章- 如何正確安裝政府簽發的憑證到正式主機

Experience of installing CA root certification in the right store to make sure .NET program or Windows service to find it.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

你必须知道的213个C语言问题

你必须知道的213个C语言问题

范立锋、李世欣 / 人民邮电出版社 / 2010-6 / 45.00元

《你必须知道的213个C语言问题》精选了213个在C语言程序设计中经常遇到的问题,目的是帮助读者解决在C语言学习和开发中遇到的实际困难,提高读者学习和开发的效率。这些问题涵盖了C语言与软件开发、C语言基础、编译预处理、字符串、函数、键盘操作、文件、目录和磁盘、数组、指针和结构、DOS服务和BIOS服务、日期和时间、重定向I/O和进程命令、C语言开发常见错误及程序调试等内容,均是作者经过充分的调研,......一起来看看 《你必须知道的213个C语言问题》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试