在C#中使用X509证书使用Java安全Web服务

时间:2017-08-01 05:38:57

标签: c# web-services ssl httpwebrequest x509certificate

我正在尝试进行webrequest并获得安全的web服务的响应。我已经在我的PC上安装了证书,并且我还将其导出为'* .cer'文件。 我使用以下代码来获取响应,但我得到此异常: “请求已中止:无法创建SSL / TLS安全通道。”

这是我的代码:

HttpWebRequest request = CreateWebRequest("https://SampleService.com")
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; 
};
 XmlDocument soapEnvelopeXml = null;
 soapEnvelopeXml = new XmlDocument();
 soapEnvelopeXml.LoadXml("My Request Body");
request.ClientCertificates.Add(GetCertificateByThumbprint());

              using (Stream stream = request.GetRequestStream())
                        {
                            soapEnvelopeXml.Save(stream);
                        }
                        using (WebResponse webResponse = request.GetResponse())
                        {
                            using (StreamReader strR = new StreamReader(webResponse.GetResponseStream()))
                            {
                                string soapResult = strR.ReadToEnd();
                            }
                         }
        /////////////////////////////////////////////////    
              public HttpWebRequest CreateWebRequest(string url)
                    {
                        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                        webRequest.Headers.Add(@"SOAP:Action");
                        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
                        webRequest.Accept = "text/xml";
                        webRequest.Method = "POST";

                        return webRequest;
                    }


            private static X509Certificate2 GetCertificateByThumbprint()
                    {

                        try
                        {
                            X509Certificate2 x509 = new X509Certificate2();
                            //Create X509Certificate2 object from .cer file.
                            byte[] rawData = ReadFile(@"H:\ExportedCer.cer");

                            x509.Import(rawData);

                            //Print to console information contained in the certificate.
                            Console.WriteLine("{0}Subject: {1}{0}", Environment.NewLine, x509.Subject);
                            Console.WriteLine("{0}Issuer: {1}{0}", Environment.NewLine, x509.Issuer);
                            Console.WriteLine("{0}Version: {1}{0}", Environment.NewLine, x509.Version);
                            Console.WriteLine("{0}Valid Date: {1}{0}", Environment.NewLine, x509.NotBefore);
                            Console.WriteLine("{0}Expiry Date: {1}{0}", Environment.NewLine, x509.NotAfter);
                            Console.WriteLine("{0}Thumbprint: {1}{0}", Environment.NewLine, x509.Thumbprint);
                            Console.WriteLine("{0}Serial Number: {1}{0}", Environment.NewLine, x509.SerialNumber);
                            Console.WriteLine("{0}Friendly Name: {1}{0}", Environment.NewLine, x509.PublicKey.Oid.FriendlyName);
                            Console.WriteLine("{0}Public Key Format: {1}{0}", Environment.NewLine, x509.PublicKey.EncodedKeyValue.Format(true));
                            Console.WriteLine("{0}Raw Data Length: {1}{0}", Environment.NewLine, x509.RawData.Length);
                            Console.WriteLine("{0}Certificate to string: {1}{0}", Environment.NewLine, x509.ToString(true));

                            Console.WriteLine("{0}Certificate to XML String: {1}{0}", Environment.NewLine, x509.PublicKey.Key.ToXmlString(false));

                            //Add the certificate to a X509Store.
                            X509Store store = new X509Store();
                            store.Open(OpenFlags.MaxAllowed);
                            store.Add(x509);
                            store.Close();

                            return x509;
                        }

                        catch (DirectoryNotFoundException)
                        {
                            Console.WriteLine("Error: The directory specified could not be found.");
                        }
                        catch (IOException)
                        {
                            Console.WriteLine("Error: A file in the directory could not be accessed.");
                        }
                        catch (NullReferenceException)
                        {
                            Console.WriteLine("File must be a .cer file. Program does not have access to that type of file.");
                        }
                        return null;
                    }

请帮我解决这个问题 提前致谢

0 个答案:

没有答案