相关疑难解决方法(0)

Powershell Invoke-WebRequest使用SSL/TLS安全通道失败

我正在尝试执行此powershell命令

Invoke-WebRequest -Uri https://apod.nasa.gov/apod/

我收到这个错误."Invoke-WebRequest:请求已中止:无法创建SSL/TLS安全通道." https请求似乎有效(" https://google.com ")但不是这个问题.如何让它工作或使用其他powershell命令来读取页面内容?

powershell ssl

219
推荐指数
5
解决办法
11万
查看次数

更新.NET Web服务以使用TLS 1.2

我需要使用TLS 1.2从我的.NET Web服务连接到另一个将强制TLS 1.2的服务.我找到了一个资源,说.NET 4.6默认使用TLS 1.2,这听起来像最简单的解决方案.我在服务器上更新了.NET框架并重新启动.在IIS中,我尝试使用.NET 4.6创建应用程序池,但4.0是唯一的选择.然后我发现了一些东西说它仍然会说4.0因为4.6是对.NET 4.0的"到位"更新.所以我想也许我已经完成了.然而,在我出于无关原因的错误页面上,它表示Microsoft .NET Framework Version:4.0.30319我似乎没有成功升级.有关如何确保我的应用程序池使用.NET 4.6的更多指针,或更一般地说如何启用TLS 1.2?

.net c# tls1.2

68
推荐指数
5
解决办法
13万
查看次数

Salesforce身份验证失败

我正在尝试使用OAuth身份验证来获取Salesforce身份验证令牌,所以我提到了wiki文档,但在获得授权代码后,当我发出带有5个必需参数的Post请求时,我遇到了以下异常

{"error":"invalid_grant","error_description":"authentication failure"} CODE 400
JSON = {"error":"invalid_grant","error_description":"authentication failure"}
Run Code Online (Sandbox Code Playgroud)

这是一个糟糕的要求.

PostMethod post = new PostMethod("https://login.salesforce.com/services/oauth2/token");
post.addParameter("code",##############);
post.addParameter("grant_type","authorization_code");
post.addParameter("redirect_uri","#################");  
post.addParameter("client_id",this.client_id);
post.addParameter("client_secret",this.client_secret);
httpclient.executeMethod(post);
String responseBody = post.getResponseBodyAsString();
System.out.println(responseBody+" CODE "+post.getStatusCode());
Run Code Online (Sandbox Code Playgroud)

如果有例外,请回复

salesforce force.com oauth-2.0

55
推荐指数
6
解决办法
5万
查看次数

.NET应用程序无法发送客户端证书 - Win 7 vs Win XP?

我正在开发一个ASP.NET Web应用程序,它使用HttpWebRequest向另一台服务器发送请求.它通过HTTPS发送请求,远程服务器需要客户端证书.请求在.NET应用程序中失败,显然无法发送正确的客户端证书.我能够成功连接并发送客户端证书,如果我只需访问URL以网页浏览器(Chrome明确).

下面的代码是一个简单的再现,只有一个基本的GET请求.

var r = WebRequest.Create(url) as HttpWebRequest;
r.ClientCertificates = new X509CertificateCollection { myX509Cert };
using (var resp = r.GetResponse() as HttpWebResponse) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我得到了我们最喜欢的例外,"无法创建SSL/TLS安全通道".通常,这些类型的问题指向证书私钥的权限问题.我尝试了所有我能想到的东西,以确保这一切都正确配置,但也许我错过了一些东西.简而言之,远程服务器正在发送一个TLS CertificateRequest,其列表似乎正确地标识了我的客户端证书,但我的应用程序无法响应任何客户端证书.

这是我的设置:

  • Windows 7专业版64位
  • 能够在Visual Studio开发服务器,在本地IIS中运行的ASP.NET WebForms/.NET 3.5应用程序以及.NET控制台应用程序/ .NET 4中运行的ASP.NET MVC 3/.NET 4应用程序中重现该问题
  • 最近安装了Microsoft .NET Framework 4.5.还没有检查这是否是一个问题

这是我尝试过的一切,以及我所知道的:

  • 在Windows XP计算机上运行时,此代码似乎工作正常
  • 我确保将我的客户端证书导入到本地计算机,个人证书存储中,并为我自己和所有相关IIS用户正确配置了私钥权限
  • 我尝试在我的机器上重新安装证书几次
  • 我已经确认.NET应用程序可以访问X509证书并且HasPrivateKey= true
  • 确保我的客户证书有效.它实际上是运行此应用程序的Web服务器的SSL证书
  • PreAuthenticate = true在请求对象中设置.没有什么区别
  • 我尝试过设置ServicePointManager.Expect100Continue = false,没有什么区别
  • 我试过设置ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但显然远程服务器需要TLS,所以没有帮助
  • 我设置一个ServicePointManager.ServerCertificateValidationCallback委托总是返回true.但是,在TLS握手中,它甚至在调用此委托之前就失败了
  • 当我转到Chrome中的URL时,它会要求我提供客户端证书,提供正确的客户端证书作为选择,我选择该证书并获得有效的响应.当我在Fiddler中构造请求时也能正常工作.所以它似乎特别是我的.NET代码,而不是证书本身或远程服务器等问题.
  • 我正在使用的供应商在不同的远程服务器上设置了相同的服务,该服务需要不同的客户端证书.所以我尝试了不同的URL和客户端证书同样的事情,并得到了同样的失败

我添加了System.Net跟踪,看到了这个: …

.net ssl client certificate

19
推荐指数
2
解决办法
1万
查看次数

.NET 4.5和.NET 4.5.1默认启用TLS 1.1和TLS 1.2

在我们的Windows 2012 Server R2上,我们需要禁用TLS 1.0.

但是我们运行.NET 4.5 Wcf服务.我们发现,如果我们禁用TLS 1.0,WCF服务不再运行,因为我们收到错误"现有连接被远程主机强行关闭".

.NET 4.5和.NET 4.5.1中是否默认启用了TLS 1.1/1.2?如果没有,我们假设是这样的,我们在WCF项目中强制项目使用TLS 1.1/1.2?

.net c# ssl wcf tls1.2

13
推荐指数
2
解决办法
3万
查看次数

RestSharp&TLS 1.1

使用RestSharp和TLS 1.1有任何已知问题吗?我们目前使用RestSharp将发布请求发送给供应商.此供应商不再接受TLS 1.0连接并更改为TLS 1.1.

问题是当他们从TLS 1.0切换到TLS 1.1然后我们不再使用RestSharp代码.

我在2008 R2(在启用1.1和1.2的注册表设置之后)以及Windows 8.1上测试了这个.他们切换到TLS 1.1,RestResponse是:

"基础连接已关闭:发送时发生意外错误"

切换回TLS 1.0,没问题.我已经测试过使用谷歌浏览器访问他们的网站,它确实显示了TLS 1.1,因此服务器和客户端工作站能够使用TLS 1.1.它似乎只是RestSharp的问题......

ssl post restsharp

11
推荐指数
1
解决办法
9319
查看次数

SoapHttpClientProtocol和TLS 1.2 - 客户端和服务器无法通信,因为它们没有通用的算法

关于这一点有很多帖子,我已经搜索过它们,但仍然没有解决方案.我希望有人可以指出我正确的方向.

我们现在要求使用TLS 1.2连接到远程提供程序.所以我安装了Windows Server 2016并根据需要进行了配置:

在此输入图像描述 在此输入图像描述

我知道远程服务器正在运行TLS 1.2并且它支持突出显示的密码.

我们使用由提供程序提供的WSDL生成的C#代理类连接到远程端点 - 然后将它们的结尾转换为TLS(System.Web.Services.Protocols.SoapHttpClientProtocol).

当我使用代理连接时,我得到一个异常,内部异常是"客户端和服务器无法通信,因为它们没有通用算法".

我无法看到ServicePointManager.SecurityProtocol的任何地方,所以我假设.NET正在拿起TLS 1.2,因为它是唯一启用的协议?不知道它是如何做密码的.

有人能告诉我我是如何尝试解决这个问题的吗?如果可能,我不想重新生成WSDL代理类.

c# ssl wsdl

9
推荐指数
1
解决办法
9449
查看次数

如何强制编译为.NET Framework 4的应用程序在.NET Framework 4.6.1下运行?

我做了大量的研究,没有找到任何合适的答案.这是场景.

我有一个编译为目标.NET Framework 4的应用程序.在运行时,我希望该应用程序实际在.NET Framework 4.6.1中执行.到目前为止我找到了两个选项.

  1. 在.NET Framework 4.6.1下重新编译应用程序
  2. 将configuration/startup/supportedRuntime元素添加到app.config,版本="v4.0"sku =".NETFramework,Version = v4.6.1"

选项1是不可取的,因为它需要重新发布软件.

选项2没有达到我的预期.它似乎检查是否安装了CLR 4.0(不是框架4.0),如果没有提示下载适当的SKU来安装它.安装后,应用程序仍在.NET Framework 4.0下执行

作为测试,以及发布此问题的原因,我创建了一个小型控制台应用程序,它只是这样做

Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol);
Run Code Online (Sandbox Code Playgroud)

如果是针对.NET Framework 4编译的,则输出为

Ssl3,Tls

如果是针对.NET Framework 4.6.1编译的,则输出为

Tls,Tls11,Tls12

.net clr

8
推荐指数
1
解决办法
3570
查看次数

无法满足安全令牌请求,因为关闭TLS 1.0时身份验证失败

所以我试图在我的服务器上关闭TLS 1.0和1.1.当我关闭TLS 1.0时,我的应用程序中出现以下错误:

System.ServiceModel.Security.SecurityNegotiationException: The caller was not authenticated by the service. ---> System.ServiceModel.FaultException: The request for security token could not be satisfied because authentication failed.
   at System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(Message message, EndpointAddress target)
   at System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(Message incomingMessage, SspiNegotiationTokenProviderState sspiState)
Run Code Online (Sandbox Code Playgroud)

启用TLS 1.0后一切正常.

现在,调用该服务的代码使用ServicePointManager以下代码指定TLS 1.2 :ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

另一端的服务正在运行.Net 4.6.2,并没有指定使用的TLS协议ServicePointManager,因此根据我的阅读,它将自动检测在此版本的.net框架中运行时需要哪个TLS协议.

有关绑定的WCF服务的Web.config如下

呼叫配置:

<basicHttpBinding>
    <binding name="MyBinding" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:02:00" sendTimeout="00:02:00"/>
</basicHttpBinding>
<netTcpBinding>
    <binding name="CrossDomainBinding">
          <security mode="Message">
              <message clientCredentialType="Certificate"/>
          </security>
    </binding>
</netTcpBinding>
<client>
    <endpoint address="net.tcp://MyService.svc"
    binding="netTcpBinding" bindingConfiguration="CrossDomainBinding" behaviorConfiguration="CrossDomainBehavior"
    contract="MyContract" name="MyBinding">
        <identity>
            <certificate …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf

8
推荐指数
1
解决办法
695
查看次数

C#Web请求w RestSharp-“请求已中止:无法创建SSL / TLS安全通道”

我对RestSharp提出了一个非常简单的Web请求:

var client = new RestClient("https://website.net");
var request = new RestRequest("/process", Method.GET);
request.AddParameter("cmd", "execute");
IRestResponse response = client.Execute(request);

var content = response.Content;
Console.WriteLine("Response: " + content);
Run Code Online (Sandbox Code Playgroud)

这将返回错误消息:

该请求已中止:无法创建SSL / TLS安全通道

三件事:

  1. 我通过浏览器得到了期望的响应,
  2. 我通过邮递员得到了期望的回复,
  3. 该请求已发送到测试环境,但是我可以将其发送到地址非常相似的生产环境,并获得我期望的响应,
  4. 我很肯定它在今天之前奏效。

他们的证书使用的是TLS 1.2和AES 128,因此它与RC4引起的错误无关。

这是在Visual Studio 2015中的本地Win 10计算机上,目标框架为.NET 4.5.2。

为什么会出现此错误?

编辑:

通过更改代码以使用基本System.Net和WebRequest类并添加以下行:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)

正如从这里建议的那样,它有效。所以我猜RestSharp由于某种原因使用了错误的协议?

c# restsharp

8
推荐指数
3
解决办法
9549
查看次数

标签 统计

.net ×5

c# ×5

ssl ×5

restsharp ×2

tls1.2 ×2

wcf ×2

certificate ×1

client ×1

clr ×1

force.com ×1

oauth-2.0 ×1

post ×1

powershell ×1

salesforce ×1

wsdl ×1