- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我用 C# 编写了一个 REST API 服务器,它使用 System.Net.Security.SslStream
类来提供 SSL/TLS 加密。
我还在创建一个 Web 服务,它使用 PHP + cURL 来处理与服务器的通信。
在本地,我使用 WAMP 作为测试环境,一切正常。
但是,在远程环境中上传和测试时,通信失败并显示以下错误消息:
cURL 错误
Unknown SSL protocol error in connection to mywebsite.example:443
SslStream 错误
SslStream.AuthenticateAsServer()
中的
AuthenticationException
:
A call to SSPI failed, see inner exception.
Inner exception: The client and server cannot communicate, because they do not possess a common algorithm
尝试使用 TLS 1.2 身份验证时发生此异常和错误:
SslStream.AuthenticateAsServer(ServerCertificate, false, SslProtocols.Tls12, true);
我尝试设置各种 cURL 选项,例如:
curl_setopt($curl, CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1_2);
但是,唉,没有快乐。
检查 phpInfo()
配置的差异后,我注意到 SSPI 在本地的 cURL 设置中启用,但在远程服务器上没有:
我对SSPI知之甚少,其实大部分只是维基百科上总结的:
Security Support Provider Interface (SSPI) is a Win32 API used by Microsoft Windows systems to perform a variety of security-related operations such as authentication.
所以,这似乎是问题的原因 - 但是......
我通过将 SslProtocols
类型从 SslProtocols.Tls12
更改为 SslProtocols.Tls
成功实现了通信>。但是,据我所知,SSPI 不依赖于任何特定的 SSL 协议(protocol),那么为什么它起作用了?
目前这是一种解决方法,但我真的很想了解导致此问题的根本原因。任何人都可以阐明这里发生的事情吗?
我宁愿完全支持 TLS 1.2 而不必降级。
最佳答案
该问题实际上与 SSPI 无关。
SslProtocols.Tls
可能意味着:“自动协商任何合适的通用版本”,而 SslProtocols.Tls12
意味着:“强制 TLS 版本 1.2”
因此,如果您强制使用 TLS 1.2 但并非所有各方都知道此版本,则握手将失败。通过让他们自动协商,他们反而可能能够在 TLS 1.1 或 1.0 上收敛
请注意,现在除了 TLS 1.2 之外的任何东西都不是一个好主意,或者至少它应该是一个临时情况。此外,两周前 TLS 1.3 刚刚作为标准发布。
让系统自动协商版本通常会更好,这样当它们升级时,它们会落入当时可能的最高版本。因此,强制执行 SslProtocols.Tls12
即使它有效,在短期内(目前最好的 TLS 版本)也是好的,但从长远来看(如果您的两个系统都已升级并且能够支持 TLS 1.3)在将来,您不会从中获利,这很可悲,因为 1.3 在许多方面都优于 1.2。
但是,相反,让他们自动协商有一些缺点:
SSLv23_METHOD
(例如,您也有 TLSv1_2_METHOD
),这确实 不是是指 SSL 2 或 SSL 3(现在应该已经过时的两个东西),而是“我们可以自动协商的最好的东西”(关于正确设计和使用 TLS API 的一般问题,特别是在网络之外,这是一个大开眼界论文:https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf )关于c# - 使用带有 C# REST API 和 SslStream 类的 cURL (PHP) 的 SSL/TLS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976278/
是否可以使用 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 握手。 到目前为止,我几乎遍历了源代码中的每个文件,但找不到任何加密函数。
我是一名优秀的程序员,十分优秀!