Https POST / GET无法使用Mono

时间:2016-09-05 13:15:00

标签: c# ssl mono raspberry-pi restsharp

我想使用Mono + Restsharp在Raspberry上执行HttpPost。

我尝试在代码中重现的Httpie调用看起来像这样:

 http POST https://XXXXX.azurewebsites.net/api/report key=value

这是C#代码:

RestClient nodeRed = new RestClient("http://XXXXX.azurewebsites.net/");
var request = new RestRequest("api/report", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(new { Timestamp = DateTime.Now, Data = "Test" });
request.Timeout = 5000;

var response = nodeRed.Execute(request);

代码运行正常,它只是不起作用。响应不包含任何内容(在httpie / MS .NET Framework上具有“成功”的服务器响应)。

我已经了解了Mono上的证书内容。正在运行

sudo certmgr -ssl -v -m "https://XXXXX.azurewebsites.net"

告诉我它第一次添加两个证书。再次运行它会再次添加第一个证书(并再次),因为它不起作用。

  

X.509证书v3      发布自:C = IE,O =巴尔的摩,OU = Cyber​​Trust,CN = Baltimore Cyber​​Trust Root      发布于:C = US,S =华盛顿,L = Redmond,O = Microsoft Corporation,OU = Microsoft IT,CN = Microsoft IT SSL SHA2      有效期:2013年12月19日20:07:32      有效期至:19/12/2017 20:06:55      警告:证书签名为无效   将此证书导入CA商店?

如果我确认并重复导入,certmgr会要求我再次导入。我怎样才能让http帖子起作用?

3 个答案:

答案 0 :(得分:3)

您可以尝试忽略带有

的证书
ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;

更新
我可以看到Mono上还存在here

答案 1 :(得分:1)

它必须与Mono有一些连接默认情况下不信任任何ssl证书... 好好检查一下http://www.mono-project.com/docs/faq/security/ https://github.com/restsharp/RestSharp/issues/728 https://github.com/dotnet/roslyn/issues/7422

或 您需要使用openssl来分析证书:

    openssl s_client -showcerts -connect www.domain.com:443
openssl x509 -text -noout -in some.crt

答案 2 :(得分:0)

嗨,朋友,我有一行代码正在为其他地方工作正常。你可以试试这个:

<强> Request and response web form using Post Method in same page c# asp.net