问题标签 [ecdhe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 如何在 PHP CURL 中使用 ECDHE 密码?
我nmap
以前扫描过,结果是这样的:
看起来他们只支持 ECDHE,从 的输出来看openssl_get_cipher_methods()
,没有 ECDHE 密码!所以我的问题是如何使用 PHP CURL 客户端连接到远程服务器?
这是我的示例 PHP 代码,它与消息一起返回false :
“列表中的未知密码:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256: ECDHE-RSA-AES128-SHA",curl 错误编号代码为59(无法使用指定的密码。)
我正在使用 PHP 5.3.29,openssl 1.0.1e-fips 2013 年 2 月 11 日
c++ - 将 ECDHE TLS 与 Boost ASIO 一起使用
TL;DR 版本
我想知道:
- 使用 ECDHE 的规范在哪里定义(在证书参数或 SSL 上下文的服务器配置中,或其他地方)?
- 在非家庭滚动的证书设置中,定义 ECDHE 公共和私人信息(最终用户或证书提供者)的责任是谁?
- 是否可以制作似乎不使用 ECDHE 的现有证书而不会导致证书出现问题?
- 有没有人在 Boost::ASIO 中使用带有 ECDHE 设置的 SSL 的例子?
更长的版本
我们一直在构建一个应用程序,该应用程序使用来自外部证书颁发机构的适当付费证书。该应用程序使用基于 Boost ASIO 和 Boost Beast 的自制服务器设置,我们最近才注意到它与 iOS 不兼容 - ASIO 说没有共享密码。
阅读 TLS 的工作原理后,我发现我们的服务器的某些部分阻止我们使用 ECDHE-* 密码套件(iOS 似乎想要)提供 TLS - 但我很难弄清楚如何争取 ASIO 和我们当前的证书/密钥为 ECDHE 服务。
我试过的:
- 使用相同的证书和密钥,使用set_tmp_dh
openssl dhparam
将结果添加到 ASIO 中,然后指定密码。Curl 报告说这允许使用但不允许连接。指定仅使用的密码会在连接时导致错误。DHE
ECDHE
ECDHE
- 尝试
openssl ecparam
使用与上述类似的方法将输出传递给 ASIO。我无法格式化 ASIO 接受的内容。 - 尝试查看是否有一种方法可以将 的输出
openssl ecparam
与另一个组合函数一起使用,将原始证书修改为使用ECDHE
. 我从OpenSSL wiki中找到了这一点,建议如果证书不包含该线ASN1 OID: prime256v1
(或类似的命名曲线),那么它不适合 ECDHE 使用。
在这一点上,我不确定问题真正出在哪里(在 ASIO、证书中或我如何将它们放在一起),而且我在互联网上可以找到的大多数信息都与从从头开始,而不是使用现有的证书。
c# - 使用 ECDiffieHellmanCng 交换密钥
我们计划使用 ECDHE 算法在客户端和服务器之间交换密钥,以便双方都可以导出一个公共密钥来加密消息
根据我所阅读的内容,要使用 ECDHE 算法,双方(客户端和服务器)应该首先就一对“公共”值(p,g)达成一致。然后每一方将使用私钥生成共享密钥,即客户端使用私钥(P1)生成共享密钥(S1),服务器使用私钥(P2)生成共享密钥(S2)参考:[ https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange#Description]
这里的共同价值是指共同的油漆。这些实际上是双方用来生成共享密钥的模值(p)和基值(g)。
然后双方交换共享密钥(S1 和 S2),并将其与自己的私钥(P1 或 P2)一起使用以导出公共密钥(K)
当我查看使用 ECDiffieHellmanCng 生成密钥的示例时,我看不到在任何地方指定这些“通用”值的选项。在我们的例子中,我希望客户端和服务器都同意 p 和 g,然后将这些值与“ECDiffieHellmanCng”一起使用来生成公共共享密钥。
我看到 Alice 和 Bob 创建了 ECDiffieHellmanCng 的新实例——他们在内部是否都使用相同的公共值(p 和 g)?
ssl - openssl 1.0.2,如何强制服务器只选择一组密码
我有使用 opensl 1.0.2j 的客户端服务器,并希望强制服务器仅使用以下密码。
我的服务器端代码如下所示。
最后一步 ssl_accept 失败
我对上述代码中的每个 ssl 调用进行了错误检查,为了清楚起见,没有放置所有代码。如果我对 SSL_CTX_set_cipher_list() 使用“TLSv1.2:!ADH:!NULL”,它工作正常。
编辑:生成的密钥是 RSA:4096。我是否需要为 ECDH/ECDHE/DHE 生成不同的密钥?
你能帮我找出它失败的原因以及我该如何解决它?
如果您需要更多信息,请与我们联系。
谢谢,纳迦
ssl - openssl 1.0.2j,如何强制服务器选择 ECDH* 密码
我有使用 opensl 1.0.2j 并使用 RSA:4096 密钥和证书的客户端服务器,并且希望强制服务器仅使用以下密码。
我的服务器端代码如下所示。
我的客户端代码如下所示
服务器上的最后一步 ssl_accept() 失败
如果我在客户端使用ECDHE*RSA*
或DHE*RSA*
密码,它工作正常。
你能告诉我我错过了什么吗?
编辑:服务器的证书(certFilePath)包含一个 RSA 公钥而不是 ECDH 公钥。
openssl - ECDHE Curve25519 密钥交换签名和 KeyValue 字段
我有一个 API,我需要在其中传递根据 API Docs 用于的“KeyMaterial”:
这是他们分享的示例
他们还提到
“签名”字段:参考签名标准了解更多信息:https ://www.w3.org/TR/xmldsig-core1/
"KeyValue" : 包含临时公钥的值
但是,我对应该如何填写这些参数感到困惑。我找不到任何 ECDHE + Curve25519 的参考实现。谁能解释我该如何填写这些参数?如何生成签名字段?和“DHPublicKey”中的 KeyValue 字段
java - 如何在 java 中使用密码套件 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 建立 TLS 连接?
我的客户端(java 1.8)正在尝试使用TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
密码套件与远程服务器建立 TLS 连接。但是抛出一个java.lang.IllegalStateException
使用的加密材料应基于脑池曲线。客户端使用 BouncyCastleJsseProvider 加密提供程序。已设置以下系统属性
出于调试目的,已使用 WireShark 嗅探握手:
.
从屏幕截图中可以看出,客户端正在请求正确的密码套件。客户您好 - 签名哈希算法:
服务器接受套件并处理握手,直到客户端生成服务器证书验证消息,这导致前面提到的 java.lang.IllegalStateException。由于异常消息显示“未跟踪 HashAlgorithm.sha256(4)”。我假设,出于某种原因,客户端不使用 sha384 来生成“证书验证”,而是使用 sha256。
我假设我可能错过了一些客户端配置步骤,以使 sha384 可用。遗憾的是,我没有找到可以为我提供一些有用信息的提示。有人可以帮我解决这个问题吗?
PS如果TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
选择而不是TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
握手操作成功,但是这个套件没有使用sha384来计算证书验证消息的内容。
PSS 由于客户端似乎没有提供https://www.rfc-editor 中所述的 (sha256(4), ecdsa(3)) 和 (sha384(5), ecdsa(3)) 的签名哈希算法。 org/rfc/rfc5246#section-7.4.1.4.1,是否有一些选项可以以编程方式提供对这些算法的支持?
添加了服务器证书请求 WireShark 协议的 PSSS 屏幕截图。
openssl - C中的DHE和ECDHE实现
我正在尝试使用 OpenSSL 比较 DHE 和 ECDHE 实现,下面给出的是我尝试执行相同操作的代码,但我需要客户端服务器演示程序,其中客户端和服务器可以交换公钥然后生成共享密钥。
我需要在 C 中实现这两种算法的示例,以便我可以在我的项目中使用它。
java - Netty tcnative 与 OpenSSL 和支持的组(椭圆曲线)
我有一台使用 JRE8、netty 4.1.x 和 netty-tcnative 2.0.36 的服务器。默认情况下SslProvider.OPENSSL
已配置。
服务器配置了 TLS 1.2 和 TLS_ECDHE_RSA* 密码套件。
我需要能够在 SSL 握手期间限制(白名单)用于 ECDHE 临时密钥交换的椭圆曲线(supported_groups 扩展)。但是,使用SslProvider.OPENSSL
, server 似乎不尊重系统属性-Djdk.tls.namedGroups
。相反,服务器总是使用 P-256 进行临时密钥交换。
如果我切换到SslProvider.JDK
,则上述系统属性 ( -Djdk.tls.namedGroups
) 将在 ECDHE 临时密钥交换期间反映。但是,我无法将我的生产应用程序切换为使用 JDK 提供程序。
我遇到了https://github.com/netty/netty-tcnative/issues/567 - 基于此,我相信不支持限制 supported_groups 扩展。但不确定是否有任何替代方法。
我的疑问:
- 与 netty-tcnative 一起使用
SslProvider.OPENSSL
时,我们可以限制椭圆曲线(支持的组/命名组)用于密钥交换吗? - 如果是,如何配置相同?