- 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/
Internal Server Error: /admin/account/customuser/add/ Traceback (most recent call last): File "C:\
有问题!虽然我发现几乎相似的线程但没有帮助:( 我编写了一个 php 脚本来从我的 MySQL 数据库中获取注册用户的数量。该脚本在我的本地主机上运行良好;它使用给定的用户名、密码和主机名,分别是“r
我正在做一项基于密码的作业,我将 key 和消息放在单独的数组中。我想创建第三个数组,其中包含围绕消息大小的 key ,如下所示: message keykeyk 我已经在这个问题上苦苦挣扎了一段时间
我的几个客户要求我实现图形密码检查器,例如 关于如何实现这种 UI 有什么想法吗? 最佳答案 试着看看这个:https://code.google.com/p/android-lockpattern/
我正在使用 MAMP,每次登录 phpMyAdmin 时,都会收到以下错误/警告消息: the configuration file now needs a secret passphrase (bl
我正在尝试通过将 Visual Studio 2013 连接到我的测试机来调试 WDF 驱动程序。它创建一个名为 WDKRemoteUser 的用户,并在进行测试时尝试自动登录。有人知道这个用户的密码
使用具有指定用户名和密码的 SVN 提交。我希望服务器抛出错误;所以我可以告诉我的用户他/她的密码错误。 相反,在使用错误密码提交后: svn commit "test_file.txt" --use
我正在尝试实现 friend 推荐。 它从节点“你”开始。而且,我想找到节点“安娜”。 换句话说,这是我的两个或更多 friend 共同认识的人。上面的示例节点是 Anna。 如果您的帮助,我将不胜感
我都尝试过 wget --user=myuser --password=mypassword myfile 和 wget --ftp-user=myuser --ftp-password=mypass
我的一位用户提示说,每当他尝试使用默认管理界面(Django 的管理员)添加新用户(auth.User)时,新用户名和密码都会自动填充他自己的。 问题是他在登录时要求 Firefox 记住他的用户名/
我们正在开发一款应用(当然)用于应用购买 (IAP)。我已完成指南中的所有操作以启用 iap,并且一切正常,直到我想要购买为止。 部分代码: MainViewController.m -(vo
我试图创建两个可选匹配项的并集(如下所示),但我得到的不是并集,而是两者的交集。我应该如何更改此查询以获得所需的联合? optional match (a:PA)-[r2:network*2]-(b:
我想将Ansible用作另一个Python软件的一部分。在该软件中,我有一个包含其用户名/密码的主机列表。 有没有一种方法可以将SSH连接的用户/密码传递给Ansible ad-hoc命令或以加密方式
嗨,我在使用xampp的Apache Web服务器上收到错误500。直到我使用.htaccess,.htpasswd文件,错误才出现。我搜索了,但找不到语法错误。我只有1张图片和要保护的索引文件。以下
我一直使用它来编辑用户帐户信息: $this->validate($request, [ 'password' => 'min:6', 'password_confirmation'
我需要使用InstallUtil来安装C# Windows服务。我需要设置服务登录凭据(用户名和密码)。这一切都需要默默地完成。 有没有办法做这样的事情: installutil.exe myserv
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
如果我有一个随机的、16 个字符长的字母数字盐(不同大小写),它是为每个用户生成和存储的,我是否还需要一个站点范围的盐? 换句话说,这样好吗? sha1($user_salt . $password)
我正在开发一个空白程序,该程序将允许用户创建一个帐户,以便他们可以存储其余额和提款/存款。用户输入用户名和密码后,如何存储这些信息以便用户可以登录并查看其余额?我不一定要尝试使其非常安全,我只是希望能
我正在尝试寻找一种通用方法来搜索没有链接到另一个节点或节点集的节点或节点集。例如,我能够找到特定类型(例如 :Style)的所有节点,这些节点以某种方式连接到一组特定的节点(例如 :MetadataR
我是一名优秀的程序员,十分优秀!