问题标签 [jsse]
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.
java - 如何使用 SSLEngine 在 x509 SSL/TLS 握手后验证服务器(对等)名称?
我正在使用SSLEngine
withNIO
进行非阻塞 TLS 通信。
该引擎工作正常,并且能够验证 CA 信任、服务器证书的有效期。
但我缺少的是证书主题名称与我连接的服务器名称匹配的验证。
考虑到主题替代名称等所有 SSL 扩展,实现它的最佳方法是什么?
我尝试简单地检查主题名称,但即使使用 ,它也不起作用google.nl
,证书中的主题是google.com
,并且google.nl
只能在替代名称扩展中找到。
java - SSLContext 初始化
我正在查看JSSE
参考指南,我需要获取一个实例SSLContext
才能创建一个SSLEngine
,所以我可以使用它Netty
来启用安全性。
要获得 的实例SSLContext
,我使用SSLContext.getInstance()
. 我看到该方法被多次覆盖,因此我可以选择要使用的协议和安全提供程序。
在这里,我可以看到可以使用的算法列表。我应该使用哪种算法来启用安全通信?
此外,由于可以指定要使用的安全提供程序,我应该使用哪个提供程序?
谢谢
java - 密钥库类型:使用哪一种?
通过查看java.security
my的文件JRE
,我看到默认使用的密钥库类型设置为JKS
. 在这里,有一个可以使用的密钥库类型的列表。
有推荐的密钥库类型吗?不同密钥库类型的优缺点是什么?
java - Keystore 的密码管理
load()
使用该方法创建后初始化密钥库(无论它是用于“密钥库”还是“信任库”) 。一个版本需要一个InputStream
对应于密钥库文件的文件,以及解密文件的密码。以编程方式向该方法提供密码对我来说似乎很奇怪。
例如,服务器使用密钥库来存储其私钥和相关证书。密钥库中存在的信息是明智的,因此受密码保护。load()
以编程方式将密码传递给方法有什么问题?最佳做法是什么?
另一个例子,但现在涉及信任库。客户端有一个信任库,用于存储受信任 CA 的证书。据我了解,信任库不包含服务器的证书,而只包含允许验证服务器证书的 CA 的证书。我看到的一个信任库示例是 JRE 中的一个(在security
文件夹 -中cacerts
)。通过查看配置,我可以看到它受默认密码保护changeit
。我知道信任库是使用密钥库实现的,因此它(或者可能是可选的?)使用密码进行加密。但是,由于信任库通常将公共信息(受信任的 CA 的证书)存储在文件中,为什么建议更改密码?
谢谢
java - 签署证书的解决方案
对于具有多个应用服务器和多个客户端的系统,我想介绍相互身份验证以及 TLS 提供的其他安全保护。
服务器和客户端可能位于不同的网络上,也可能位于同一网络上。
每个实体(客户端或服务器)都有自己的存储其私钥/公钥对的密钥库和包装公钥的 X.509 证书。但是,此时,证书是自签名的。因此,它不会被其他通信实体验证。经过一番研究,我研究了一些解决方案:
- 创建将签署证书的私有 CA。如果我理解得很好,CA 的证书必须存在于每个实体的信任库中,以便其他实体的证书可以使用 CA 的证书进行验证。
- 创建私有 CA 作为第一个解决方案。但是,私有 CA 的证书是由商业 CA(例如 Verisign)签署的。我不知道它为以前的解决方案增加了什么。
- 由商业 CA 签署每个实体的证书。但这种解决方案似乎很昂贵。
- 仅使用自签名证书。每个实体的证书都是由它自签名的,并且必须添加到它想要与之通信的每个实体的信任库中。
这是我第一次接触安全。在您认为有效的解决方案中,您推荐哪一种?
谢谢
java - java 服务器上的 KeyStore 错误:找不到 BKS
我在这一行得到一个错误:
我得到的错误是:
我将 bcprov-jdk16-146.jar 添加到“引用库”中,但仍然没有运气。
我的整个程序允许将安卓手机用作使用 SSL 套接字连接的计算机的鼠标和键盘。android应用程序具有相同的行,没有错误。
我究竟做错了什么?
编辑:
也许这是大多数人的常识,但它不适合我,所以对于像我这样的人来说,这就是我所做的。
我使用 BKS 的原因是因为这是 android 允许的唯一格式,但我不知道您只在 android 端需要它,您可以在服务器上使用另一种格式,然后复制密钥并将其转换为BKS 在 android 上使用,无需 BouncyCastle。
我为服务器使用了 JKS 密钥,然后使用名为 portecle 的程序将该密钥的副本转换为 BKS 以在 android 上使用。
java - Tomcat 中的 JSSE 配置 - 启用 AES256 密码
Apache Tomcat 服务器中的 JSSE 支持哪些密码?如何启用 AES256 并重新排序密码?
java - 收到此错误:“javax.net.ssl.SSLHandshakeException:没有共同的密码套件”
我有一个用 C# 编写的客户端和一个用 JAVA 编写的服务器。因此,当我尝试连接时,我在服务器javax.net.ssl.SSLHandshakeException: no cipher suites in common
和 C#“EOF 或 0 字节”中出现错误。
[C#]:
[JAVA]:
和 JAVA 启动属性:
java - 将证书密钥库迁移到另一个 JVM
我正在开发一个需要 JRE 并创建证书的安装程序。我正在开发捆绑新 JRE 的下一个版本的安装程序。我需要将在旧 JRE 的cacerts密钥库中导入的所有证书移动到新 JRE。如果我将旧 jre/lib/security/ 目录下的“cacerts”文件复制到新的 JRE,cacerts 中的现有证书是否有效,我将进行安装。
我看了看问题:“是否可以将 cacerts 的所有内容导入 jssecacerts 文件?” 将证书导入我的密钥库。这是否意味着如果通过复制 cacerts 的密钥库迁移不起作用,我需要备份现有的 jre/lib/security/cacerts 并将其导入新的 JRE?
java - 以编程方式从 PEM 获取 KeyStore
如何以编程方式从包含证书和私钥的 PEM 文件中获取 KeyStore?我正在尝试通过 HTTPS 连接向服务器提供客户端证书。如果我使用 openssl 和 keytool 来获取我动态加载的 jks 文件,我已经确认客户端证书有效。我什至可以通过动态读取 p12 (PKCS12) 文件来使其工作。
我正在考虑使用 BouncyCastle 的 PEMReader 类,但我无法克服一些错误。我正在运行带有 -Djavax.net.debug=all 选项的 Java 客户端和带有调试 LogLevel 的 Apache Web 服务器。我不确定要寻找什么。Apache 错误日志表明:
Java 客户端程序表明:
客户端代码:
我注意到服务器在日志中输出 SSLv3,而客户端是 TLSv1。如果我添加系统属性 -Dhttps.protocols=SSLv3 那么客户端也将使用 SSLv3,但我会收到相同的错误消息。我也尝试添加 -Dsun.security.ssl.allowUnsafeRenegotiation=true 结果没有变化。
我用谷歌搜索了这个问题,通常的答案是先使用 openssl 和 keytool 。就我而言,我需要直接即时阅读 PEM。我实际上是在移植一个已经做到这一点的 C++ 程序,坦率地说,我很惊讶在 Java 中做到这一点有多么困难。C++ 代码: