- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
最近,我们的一个 ASP.NET ASHX 处理程序调用另一台服务器上的另一个 ASHX 处理程序开始失败,并出现以下错误:“未处理的异常:System.Net.WebException:请求被中止:无法创建SSL/TLS 安全通道。”为另一台服务器安装证书没有帮助(无论如何,另一台服务器是面向公众的并且具有由 CA 签名的证书)。
我写了一个小的 C# 程序来测试我是否可以从命令行连接到其他服务器:
using System.Net;
public class Test
{
const string theUrl = "https://www.example.com/Handler.ashx?ID=123";
public static void Main(string[] args)
{
var req = WebRequest.Create(theUrl);
var resp = req.GetResponse();
}
}
这也因 System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel
而失败。但是,如果我从 VBScript 文件调用处理程序:
Const theUrl = "https://www.example.com/Handler.ashx?ID=123"
Dim oXmlHttp
Set oXmlHttp = WScript.CreateObject("Microsoft.XMLHTTP")
With oXmlHttp
.Open "GET", theUrl, False
.Send
WScript.Echo CStr(.Status)
End With
Set oXmlHttp = Nothing
它有效;脚本返回状态 200!
我检查了 .NET machine.config
文件,因为我在过去遇到过类似的问题,从非托管代码发送的请求有效,但从 .NET 发送的请求无效,因为代理设置不同,但这是这里不是这种情况。为什么来自 VBScript 的请求应该工作但来自 .NET 的请求失败?
编辑:启用跟踪会显示与 this question 中报告的错误类似的错误:
System.Net Information: 0 : [28468] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 1ad5f0:29f3620, targetName = www.example.com, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [28468] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=AlgorithmMismatch).
System.Net.Sockets Verbose: 0 : [28468] Socket#3741682::Dispose()
System.Net Error: 0 : [28468] Exception in the HttpWebRequest#2383799:: - The request was aborted: Could not create SSL/TLS secure channel.
System.Net Error: 0 : [28468] Exception in the HttpWebRequest#2383799::GetResponse - The request was aborted: Could not create SSL/TLS secure channel.
最佳答案
“算法不匹配”有点含糊,特别是因为 TLS 错误是 well defined .没关系。
运行 ssl-enum-ciphers (perl) 或 nmap's equivalent针对服务器查看它支持和喜欢的 SSL/TLS 版本和密码。紧要关头你可以试试 MS wfetch做类似的事情,但它的协议(protocol)和密码支持非常有限。您可以使用 openssl
作为服务器(需要 key +证书)为客户端做同样的事情:
openssl s_server -quiet -accept 4443 -key server.key -cert server.crt
可选地混合 -no_xxx
或 -xxx
其中 xxx
是 ssl2
, ssl3 之一
, tls1
的多样性。
(浏览器友好,但不太容易编码/自动化是 https://www.ssllabs.com/ssltest/viewMyClient.html 或查看 here 了解更多信息。)
协议(protocol)/密码协议(protocol)的工作方式是客户端发送 (ClientHello) SSL/TLS 版本、密码列表(和扩展),然后服务器选择协议(protocol)版本和共同密码(相交集)并回复 (ServerHello)。选择的(粗略)方法是:
[1] this allows the operator to configure the server prefer ciphers based on other than "strength" (symmetric key-size), e.g. to force 128-bit RC4 over AES-256 while supporting both, as was the style a year or two back.
默认的密码顺序通常是按“强度”(对称密码 key 大小)降序排列。 SSL/TLS 协议(protocol)版本设置了一组预期的密码,但支持相同的密码(例如 AES-128)是不够的。
可能是客户端不使用 TLS,而服务器不使用 SSL,例如https://serverfault.com/questions/208542/what-might-cause-https-failure-when-not-specifying-ssl-protocol不过,这应该会导致协议(protocol)或握手错误。
由于通过 SecurityProtocolType.Ssl3
(另一种情况 here)强制协议(protocol),看起来客户端提出了一些服务器不喜欢的东西——如果你已经确认双方都支持 TLS那么它可能是 SNI 绊倒了你,然后回退到 SSL3 回避了这一点。
万一客户端默认为 SSlv2,服务器拒绝它是完全正确的;-)
关于asp.net - 为什么从 VBScript 调用 ASP.NET ASHX 处理程序有效,但在 .NET 中出现 "could not create SSL/TLS secure channel"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24291053/
是否可以使用 OpenSSL 或其他工具通过 TLS 建立 TLS 连接? 如果可能,每个级别的证书是否需要不同? 最佳答案 这在理论上应该工作得很好,但我不能确定 OpenSSL 或其他东西是否会轻
在我的 java 代码中,我正在使用命令创建 SSL 上下文的一个实例 SSLContext ctx = SSLContext.getInstance("TLS"); 但是在我的 tomcat 服务器
在我的 java 代码中,我正在使用命令创建一个 SSL 上下文实例 SSLContext ctx = SSLContext.getInstance("TLS"); 但在我的 tomcat 服务器中,
范围:这是一个具有一个 channel 的网络,该 channel 由 3 个组织组成,每个组织 1 个 anchor 节点,每个组织 1 个 CA 和每个组织 1 个 MSP。 我在我的 Hyper
无法找到用于在 iis 上启用/禁用 tls 的特定设置。启用/禁用 ssl 是否与启用/禁用 tls 相同? 我浏览了一些博客,发现 SSL 是 TLS 的前身,旧版本的 SSL 已被弃用。但我无法
最近,我一直在为基于物联网的项目评估不同的 API 网关 (API GW) 选项。这样做的目的是找到一个足够好的解决方案来执行设备和 API GW 的相互 TLS (mTLS) 身份验证。 我尝试过的
几个月来,我的 Web 应用程序在不同版本的 IE/Firefox/Chrome 上运行良好。我的应用程序在 IIS 10.0 上运行。当我从 Windows 7 框 (IE 11.0.***) 中点
我有一个在 Java 7 上运行的 HTTPS 网络服务。我需要进行更改,以便此服务仅接受 TLS1.2 连接并拒绝 SSL3、TLS1.0 和 TLS1.1。 我添加了以下 Java 参数,使 TL
我在资源管理器不显示网站时遇到问题:“无法显示此页面。在高级设置中打开 TLS 1.0、TLS 1.1 和 TLS 1.2”。 我在 chrome 中调试了证书并说“连接是使用 aes_128_cbc
我正在与 5 个订购者、1 个组织和 2 个同行建立我的网络。还有 1 个 cli 和 1 个 ca。 我从 1 个排序者扩展到 5 个实现 Raft 的排序者。这就是为什么我想扩展我的网络并对多个对
当k8s集群开启了TLS认证后,每个节点的kubelet组件都要使用由kube-apiserver的CA签发的有效证书才能与kube-apiserver通信;当节点非常多的时候,为每个节点都单独签署证
我正在尝试使用 pjsip 安装中的 pjsua 程序在两个虚拟机之间进行安全调用。我通过以下方式在每个节点上启动程序: pjsua-x86_64-unknown-linux-gnu --use-tl
我开发的软件应用程序使用 gRPC 在客户端和服务器之间建立双向流。 我只在 java 中寻找类似于这张票的答案的东西:How to enable server side SSL for gRPC?
我正在尝试调试与 TLS 相关的问题。TLS 在两个应用程序客户端 A 和服务器 B 之间设置。A 和 B 都交换了证书,我已经验证证书具有正确的扩展名,并且还通过其根 CA 成功验证。叶证书的根 C
“Java 1.7 TLS 1.1 服务器”和“Java 1.8 客户端”之间的 SSL/TLS 握手在我的环境中失败,服务器端出现以下异常: java.security.NoSuchAlgorith
我正在尝试了解 Docker ,但我不断收到神秘的(对我而言)错误消息。 可能最简单的例子是尝试打印我安装的 Docker 版本: $ sudo docker version Client versi
这是我第一次使用 Amazon Lighsail、Wordpress Multisite、Bitnami甚至使用 Let's Encrypt;现在似乎一切正常,除了我的虚拟主机文件中的 SSL 指令。
我有一个 MariaDB "M"。在同一台机器上有一个应用程序“A”,它可以访问它。在不同的服务器上,另一个应用程序“B”也在访问它。 现在我想在 MariaDB 上启用 TLS 以保护连接 B ->
我正在寻找通过代理连接到一些 HTTPS/TLS 站点,其中到代理本身的连接也是通过 HTTPS/TLS 建立的,来自一个高度依赖请求的 python 应用程序。 urllib3(因此 request
现在我正在努力改变 EMQtt 和 Erlang MQTT 代理,以便我可以使用预共享 key 而不是非对称方法执行 TLS 握手。 到目前为止,我几乎遍历了源代码中的每个文件,但找不到任何加密函数。
我是一名优秀的程序员,十分优秀!