- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为我的服务器应用程序使用 BouncyCaSTLe FIPS JSSE 和 TLS 提供程序。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-fips</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bc-fips</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bctls-fips</artifactId>
<version>1.0.10</version>
</dependency>
在应用程序中配置 FIPS 和 JSSE 提供程序,如下所示。
Security.insertProviderAt(new BouncyCastleFipsProvider(), 1);
Security.insertProviderAt(new BouncyCastleJsseProvider("fips:BCFIPS"), 2);
Security.setProperty("keystore.type", "BCFKS");
SSL证书配置如下:
Server Cert - Public Key: RSA 2048 bit, Sign Algorithm: SHA256WithRSA
Issuing CA - Public Key: RSA 2048 bit, Sign Algorithm: SHA256WithRSA
Root CA - Public Key: RSA 2048 bit, Sign Algorithm: SHA1WithRSA
使用 Zulu OpenJDK JRE 11。以下是与 TLS 相关的其他系统属性
-Djdk.tls.disabledAlgorithms="MD5, RC4, TLSv1, SSLv2Hello, SSLv3, DSA, DESede, DES, 3DES, DES40_CBC, RC4_40, MD5withRSA, DH, 3DES_EDE_CBC, DHE, DH keySize < 1024, EC keySize < 224" -Djdk.tls.ephemeralDHKeySize=2048 -Djdk.tls.rejectClientInitiatedRenegotiation=true -Djava.security.egd=file:/dev/./urandom -Dorg.bouncycastle.rsa.allow_multi_use=true
支持的协议(protocol)是 TLSv1.2。
期望:
我希望服务器支持 TLS_ECDHE_RSA 类型的密码。当使用具有相同配置(减去上面的 BC 库)的相同应用程序和 Sun JSSE 时,这些密码被启用。
实际:
问题是在 SSL 扫描中仅显示下面列出的 TLS_RSA 类型的密码:
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
在 bouncycaSTLe 调试日志中,我看到以下条目
[o.b.j.p.ProvTlsServer] - Server found no credentials for cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
[o.b.j.p.ProvTlsServer] - Server found no credentials for cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
[o.b.j.p.ProvTlsServer] - Server found no credentials for cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
[o.b.j.p.ProvTlsServer] - Server found no credentials for cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
[o.b.j.p.ProvTlsServer] - Server found no credentials for cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
[o.b.j.p.ProvTlsServer] - Server found no credentials for cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
这是什么意思?我没有从谷歌搜索中找到任何有用的信息。有人可以帮助解决这个问题。
提前致谢。
可能的类似问题:DHE ciphers not exposed by BouncyCastle provider
Update-1
这是将 ssl.KeyManagerFactory.algorithm
和 ssl.TrustManagerFactory.algorithm
设置为 PKIX 后的更新,如以下答案中所建议。
感谢您建议该配置。现在 TLS_ECDHE_RSA* 密码出现在 SSL 扫描中。
但是有一个问题。支持的密码列表还包括 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
(请参阅屏幕截图),根据本文档(附录 B),它在 FIPS 模式下不受支持:https://downloads.bouncycastle.org/fips-java/BC-FJA-(D)TLSUserGuide-1.0.10.pdf .
我设置了系统属性-Dorg.bouncycaSTLe.fips.approved_only=true
,但没有发现任何区别。
我不确定这是否符合预期。对此有什么想法吗?
额外观察:一旦我按照上面的建议配置了 PKIX 算法,我很快就开始收到错误 org.bouncycaSTLe.crypto.IllegalKeyException: Attempt to sign/verify with RSA modulus already used for encrypt/decrypt.
在 SSL 扫描之后。此错误阻止了与我的应用程序的所有后续 TLS 连接。为此,我尝试了以下两种方法。
设置 -Dorg.bouncycaSTLe.jsse.fips.allowRSAKeyExchange=false
如 this forum 所述.但是,这会禁用所有 TLS_RSA 密码。
配置系统属性-Dorg.bouncycaSTLe.rsa.allow_multi_use=true
。有了这个,我可以同时使用 TLS_RSA 和 TLS_ECDHE_RSA 密码。
最佳答案
那些日志条目(“服务器未找到凭据...”意味着服务器配置为支持上述算法,但无法通过 X509KeyManager 找到合适的凭据( key 加证书)SSLContext 已初始化.
BCJSSE(尤其是 FIPS)不与其他提供商的 KeyManagerFactory 或 TrustManagerFactory 互操作,因此请检查您是否已将默认算法配置为 PKIX(在 java.security 中)以使用 BCJSSE:
ssl.KeyManagerFactory.algorithm=PKIX
ssl.TrustManagerFactory.algorithm=PKIX
否则:KeyManagerFactory 没有正确初始化(KeyStore 有问题),或者 chooseServer... 方法调用未能找到任何适合 RSA 签名的凭证,或者它们已经过期,或者具有不兼容的 KeyUsage 或 ExtendedKeyUsage,或其他一些细节。在某些情况下,我们确实有比 SunJSSE 更严格的条件。如果您可以将日志记录级别降低到 FINEST,您应该会看到更多与失败查找相关的条目(为此可能需要升级到 bctls-fips 的 1.0.11)。
我们为 bctls-fips 提供了一个源 jar,因此如果您能够在调试器中查看 X509KeyManager 调用,您可以找出找不到可接受凭据的具体原因。否则我们需要查看证书的更多详细信息。在这种情况下,在 our GitHub 提出问题可能会更好。 .
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:我相信这是允许的,所以这是文档中的错误。
如果您处于批准模式,则不能使用单个 RSA key 进行签名/验证和加密/解密。 TLS_RSA_* 密码套件将使用 key 在服务器上解密,而 TLS_ECDHE_RSA_* 密码套件将使用 key 进行签名。为了启用两者,您需要为每种情况提供单独的 RSA 凭据,一个使用 KeyUsage 'digitalSignature',另一个使用 KeyUsage 'keyEncipherment'(这样 KeyManager 知道在每种情况下使用哪个)。 org.bouncycaSTLe.rsa.allow_multi_use 可以让它用于调试目的,但它不符合 FIPS 以允许在批准模式下多次使用。 org.bouncycaSTLe.jsse.fips.allowRSAKeyExchange 可用于禁用 TLS_RSA_*,推荐这样做,因为这些都是过时的密码套件。
关于ssl - BouncyCaSTLe JSSE 和 BCTLS 密码没有凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66316317/
我在 Cloudflare 的域名服务器上有一个域名 example.com。该域指向我的专用服务器的 IP 地址,该服务器运行 CentOS/WHM/cPanel。该站点可访问 - 一切都很好。 我
我正在努力将 SSL 支持添加到我们现有的应用程序中,并已开始考虑向后兼容性。 与我读过的其他帖子不同的一个特殊情况是服务器可能不一定使用 SSL 代码更新。所以我将有一个 SSL 客户端连接到一个对
我有几个 https://*.rest-service.mydomain.com。随着服务数量的增加,我觉得管理 SSL 证书的成本很高。我为 *.mydomain.com 购买了通配符证书。 新添加
我的客户要求我在他的网站上做反向 ssl。但我是这个学期的新手。谁能帮我解决这个问题。 请描述或引用如何做。 最佳答案 查看 this wiki article . In the case of se
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 去年关闭。 Improve this
我连接到我的网络服务器上的存储库,但是当我尝试推送我的更改时,它显示:“错误 403:需要 ssl”,但在我的存储库设置中我已经激活了 ssl 选项。 有什么建议吗? 最佳答案 当您连接到存储库时,您
抱歉,如果这听起来像是转储问题,我已经阅读了很多关于 SSL 握手和 SSL 工作原理的文章和文档。我对一件事感到困惑,如果有人能澄清我就太好了。 我知道私钥要保密。但是我已经看到通过在请求中指定私钥
随着物联网越来越主流,越来越需要从硬件发送http请求。 一个主要问题是硬件微 Controller 无法发送 ssl 请求,但大多数服务器/网站/服务都在使用 ssl。 所以,问题是,有没有桥(一个
我有一个 ssl 页面,它还从非 ssl 站点下载头像。我能做些什么来隔离该内容,以便浏览器不会警告用户混合内容吗? 最佳答案 只是一个想法 - 或者: 尝试在头像网站上使用 ssl url,如有必要
我在 Digital Ocean droplet(使用 nginx)上设置了两个域。我已经在其中一个(domain1)中安装了一个 SSL 证书,并且那个证书一切正常。第二个域 (domain2) 不
我收到这个错误: Error frontend: 502 Bad gateway 99.110.244:443 2017/09/28 13:03:51 [error] 34080#34080: *10
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 6 年前。 Improve
我遇到了一个问题,我正在构建一个 nginx 反向代理以定向到不同 url 路径上的多个微服务。 该系统完全基于 docker,因此开发和生产使用相同的环境。这在安装 SSL 时给我带来了问题,因为
所以我知道要求 SSL 证书和接受之间的根本区别,一个意味着您必须拥有 SSL 证书,另一个意味着您不需要。 在某个网页的 IIS 管理器中,我有以下设置: 我遇到的问题是,当我设置需要 SSL 证书
我今天才发现 .app 域名需要 SSL 证书。我购买它是为了将 DNS 重定向到已经设置了 SSL 证书的站点,所以我的问题是是否可以设置它? 我正在使用 Google Domains,在将合成临时
堆栈 : react ,NGINX 1.14.0,GUnicorn,Django 2.2.8,Python 3.6.9 错误 : 在浏览器:当 React 调用 Django API(当然是在请求头中
假设我在计算机上编辑主机文件以使 google.com 指向我的 VPS 服务器 IP,并且服务器具有通过 Apache 或 Nginx 配置的 google.com 的虚拟主机/服务器 block
我有一个场景,我正在处理用于 URL 路由的 IIS 网站配置。我已添加网站并在服务器上导入所需的证书。 我的情况是(我有多个网站 URL 和两个 SSL 证书 - 如下所示): qatest1.ab
我知道服务器发送的证书无法伪造(仍然存在 MD5 冲突,但成本高昂),但是伪造客户端又如何呢?在中间人攻击中:我们不能告诉服务器我们是合法客户端并从该服务器获取数据并对其进行操作,然后使用合法客户端公
我已通读相关问题,但无法完全找到我要查找的内容。我设置了一个名为“domain.com”的域,并创建了两个子域“client.domain.com”和“client-intern.domain.com
我是一名优秀的程序员,十分优秀!