c#webrequest POST与p12 405错误

时间:2018-02-08 11:55:45

标签: c# certificate webrequest p12

撕掉我的头发。 我们有一个p12文件,无法导出到.pfx,因此stackoverflow上的解决方案没有帮助。

使用SOAPUI,我收到回复, 但是从我的C#(2014)客户端,作为控制台应用程序编写,我只得到405错误。

代码如下:

        string host = "https://dev-cust-ws.m2xxx.com:8443/xyz/supplier/ws";
        string certName = @"C:\\Users\\Neal.Rogers\\Desktop\\fmcgx201802.p12";
        string password = @"fmGCG@fGnnnn";

        X509Certificate2Collection certificates = new X509Certificate2Collection();
        certificates.Import(certName, password, X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.PersistKeySet);

        ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(host);
        req.AllowAutoRedirect = true;
        req.ClientCertificates = certificates;
        req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "POST";
        req.ContentLength = (long)strEnvelope.Length;

        Stream postStream = req.GetRequestStream();
        postStream.Write(postDataBytes, 0, (int)postDataBytes.Length);
        postStream.Flush();
        postStream.Close();
        WebResponse resp = req.GetResponse();

尝试了以下内容

 string soapUrl = "https://dev-cust-ws.m2xxxx.com:8443/xyz/supplier/ws";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(soapUrl);
            request.ContentType = "application/x-www-form-urlencoded";

            var store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);
            var cert = store.Certificates.Find(X509FindType.FindByThumbprint, "D0C126412A77DEA313A926DBC34BFC1EDDEDFD58", false)[0];
            request.ClientCertificates.Add(cert);
            request.Method = "POST";
            request.Timeout = 60000;
            request.ContentLength = (long)strEnvelope.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(postDataBytes, 0, (int)postDataBytes.Length);
            requestStream.Close();
            HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
            StreamReader responseReader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
            strReturn = responseReader.ReadToEnd();
            resp.Close();

提前致谢

0 个答案:

没有答案