Https POST/GET 不适用于 Mono

Https POST/GET not working on Mono

我想使用 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 上带有 "Success" 的服务器响应)。

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

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

告诉我它第一次添加了两个证书。 运行 它再次(又一次)添加了第一个证书,就像它不起作用一样。

X.509 Certificate v3 Issued from: C=IE, O=Baltimore, OU=CyberTrust, CN=Baltimore CyberTrust Root Issued to: C=US, S=Washington, L=Redmond, O=Microsoft Corporation, OU=Microsoft IT, CN=Microsoft IT SSL SHA2 Valid from: 19/12/2013 20:07:32 Valid until: 19/12/2017 20:06:55 WARNING: Certificate signature is INVALID Import this certificate into the CA store ?

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

嗨,朋友,我有一行代码适用于其他地方,运行良好。你可以试试这个:

它必须与 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

您可以尝试忽略带有那个的证书

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

更新
如我所见 here 也存在于 Mono 上