標籤:ram 導致 java http cat span manage 1.5 tag
在對接華為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", 導致格式錯誤, 純手誤 不知這個空格是怎麼進去的, 去掉空格後請求成功了.囧
C# .net中的https請求