在對接華為NB-IoT平臺時用到了https連接方式, 華為方面提供了crt格式的證書文件, 但官方只給了java範例, C#引用該證書時出現了問題, 下麵是踩的坑: NB_IoT平臺介面調試, https認證方式 NB_IoT平臺介面調試, https認證方式 首先在代碼中加入 1 Service ...
在對接華為NB-IoT平臺時用到了https連接方式, 華為方面提供了crt格式的證書文件, 但官方只給了java範例, C#引用該證書時出現了問題, 下麵是踩的坑:
NB_IoT平臺介面調試, https認證方式
- 首先在代碼中加入
-
1 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
回調函數直接返回true 不驗證證書
- 最初只使用了一個證書 研究https驗證方式後, 發現需要同時使用"校驗"和"設備端證書", 於是導入兩個證書
1 X509Certificate cer = new X509Certificate(@"C:\ca.crt"); 2 webrequest.ClientCertificates.Add(cer2);
後來發現連接的伺服器地址有問題 更改了連接地址, 返回時出現"CryptographicException"異常, 尋找解決方法, 加入代碼
1 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
以使用TLS加密模式. (這裡註意 需要升級到.net framework4.5以上, 才有Tls加密方式)
- 嘗試過試用其他格式的證書, 但是都不可用,使用JKS格式的證書, 生成時直接報錯"找不到申請的對象", 懷疑是證書格式C#不支持, 貌似JKS是java的一個工具專門使用的格式.使用其他格式後,可以生成證書,但是返回時顯示"未能創建SSL/TLS安全通道"
- 改X509Certificate 為X509Certificate2 返回400錯誤 說明證書驗證通過 但是請求格式有問題 原因待分析
- 第二天早上(4月12)發現, Https頭內的"Content-Type"中多了一個空格"Content -Type", 導致格式錯誤, 純手誤 不知這個空格是怎麼進去的, 去掉空格後請求成功了.囧