我正在尝试使用一个Web服务,该服务要求开发人员作为参数的一部分传递签名证书。该服务在测试环境中运行良好,但是对于生产环境,除了签名证书外,还需要根证书才能成功访问该服务。这已经在《邮递员》中进行了测试,并取得了成功的结果。
当使用RestSharp库在C#代码中实现时,我得到如下所示的响应。
查询客户端响应日志:{“statusCode”:0,“statusDescription”:null,“content”:“”,“headers”:[],“responseUri”:null,“errorMessage”:“请求已中止:无法创建SSL/TLS安全通道。”}
我的问题是,如何使用Restsharp库在C中实现这一点。下面是我实现这一点的代码。然而,我不断收到错误“请求被中止:无法创建SSL/TLS安全通道。”
log.Info("-------------------Initiating Query Request---------------------------"); QueryClient ad = new QueryClient(); ad.institutionId = ConfigurationManager.AppSettings["OriginInst"]; ad.proxyId = pr.proxyId; ad.requestSource = "XX"; ad.requestTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string concat = ad.institutionId + ad.proxyId + ad.requestSource + ad.requestTimestamp; HelperLibrary hl = new HelperLibrary(); string key = ConfigurationManager.AppSettings["pkey2"]; string signature = hl.GetSignature(concat, key); ad.requestSignature = signature; ServicePointManager.Expect100Continue = true; ServicePointManager.DefaultConnectionLimit = 9999; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; var client = new RestSharp.RestClient("https://service.url"); //load certificates var myCert = new X509Certificate2(ConfigurationManager.AppSettings["certificatePath"], ConfigurationManager.AppSettings["certificatePassword"], X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); var rootCert = new X509Certificate2(ConfigurationManager.AppSettings["certificateRootPath"]); X509Chain chain = new X509Chain(); chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; chain.ChainPolicy.ExtraStore.Add(rootCert); X509CertificateCollection clientCerts = new X509CertificateCollection(); clientCerts.Add(myCert); clientCerts.Add(rootCert); client.ClientCertificates = clientCerts; ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; }); var request = new RestSharp.RestRequest(RestSharp.Method.POST); log.Info("Query Client Using Certificate Path: " + ConfigurationManager.AppSettings["certificatePath"]); request.AddHeader("accept", "application/html" target="_blank">json"); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", jsonString, RestSharp.ParameterType.RequestBody); var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var requestToLog = new { resource = request.Resource, parameters = serializer.Serialize(request.Parameters), method = request.Method.ToString(), // This will generate the actual Uri used in the request uri = client.BuildUri(request), }; log.Info("Query Client Request: " + requestToLog); RestSharp.IRestResponse response = client.Execute(request); var responseToLog = new { statusCode = response.StatusCode, statusDescription = response.StatusDescription, content = response.Content, headers = response.Headers, responseUri = response.ResponseUri, errorMessage = response.ErrorMessage, }; log.Info("Query Client Response Log: " + JsonConvert.SerializeObject(responseToLog));
非常感谢您的建议。
这个错误与代码无关。出现问题的原因是我正在从浏览器访问该服务。然而,浏览器没有该证书颁发机构的任何记录。根证书必须添加到浏览器中的证书管理器中。以下是在Firefox浏览器中添加证书颁发机构的步骤。
工具-
关于如何在Firefox浏览器中添加证书颁发机构的第一个屏幕截图
关于如何在Firefox浏览器中添加证书颁发机构的第二个屏幕截图
一旦添加了证书,我就可以无障碍地访问该服务。
我正在努力做一些基本的事情,但我的头脑还没有完全清醒过来。我有一个spring boot应用程序,它应该公开一个rest url。 我是这样做的: 正如您所见,它使用的是另一个服务,我正试图用一个外部客户机实现该服务: 界面看起来像: 当MdmhClient在调用: 我知道要解决这个问题,我需要将证书导入jre。我正在运行Intellij IDE,并将项目的jdk路径设置为: 我还通过firefo
问题内容: 我想要求基于Java 1.7内置HttpsServer的服务器进行客户端证书认证。 我似乎找不到任何使服务器无法通过身份验证的方法。无论客户端证书是受信任的,未知的还是完全不存在的,它都会愉快地为所有旧客户端提供数据。 我对文档的阅读建议,如果不信任客户端,则设置HttpsParameters.setNeedClientAuth(true)应该会导致身份验证失败。我发现有类似问题的人的
对于我们的指向站点VPN,我们希望创建一个根证书。因此我们可以为所有需要登录VPN的合作伙伴创建尽可能多的客户端证书。(Azure虚拟网络) 手工完成这件事很完美。我们生成一个作为根CA的证书(自签名)。我们可以在powershell中这样做:
:) 我在本地Gentoo Linux集群上安装了kubenretes 1.9.3。 我正在尝试配置kubectl,如https://kubernetes.io/docs/getting-started-guides/scratch/ kubernetes文档声明使用和配置kubectl。到目前为止,我在文档中设置了和。不知道我还需要创建哪些证书。 文档声明使用和但是我找不到如何创建它们。 我使用
使用用户证书验证 SSH (服务端) 在以安全为前提下要保障可靠性、可控性和一致性是非常复杂的。我们可以利用 SSH 又或者说 OpenSSH 来替代所依赖的中央身份验证(比如 LDAP 或者 Kerberos) 除了 通过 PIV 和 PKCS#11 验证 SSH 之外,还可以增加远程 SSH 验证的安全性。Facebook 和 Yahoo 已经更换使用 SSH 用户证书来避免中心认证系统宕机。