使用Java独立应用程序的SSL连接
我创建了一个独立的可执行JAR程序,需要通过SSL连接发送私有信息。使用Java独立应用程序的SSL连接,java,encryption,ssl,Java,Encryption,Ssl,我创建了一个独立的可执行JAR程序,需要通过SSL连接发送私有信息。 我无法使用证书建立SSL连接。我得到了这个: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path `building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid cer
我无法使用证书建立SSL连接。我得到了这个:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path `building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target`
因此,我在某处找到了一些代码,这些代码创建了一个不验证证书链的信任管理器:
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
这就成功了,我能够在没有任何证书的情况下建立SSL连接
我担心的是,在交换私人信息时,数据是否仍然会被加密。
这是一个执行JAR文件,客户端将下载到他们的计算机上
那么,这种情况下真的需要证书吗?它仍然是加密的,但不可信。最好改为修复证书验证问题 本质上,SSL提供了加密和信任机制。您绕过了信任部分,因此消息仍将被加密,但容易被拦截或窥探,例如使用中间人攻击。MITM可以拦截请求,并使用完全不同的证书完成SSL握手。他们可以选择将您的消息转发到预期的服务器&返回,这样您就永远不会知道消息被截获了 您应该考虑下载服务器证书并将其放入信任库,该信任库可以在运行时加载 看。 keytool可执行文件与JDK捆绑在一起,您可以使用此命令行工具创建“密钥库”(在本例中称为“信任库”),并将证书导入其中 告诉Java使用密钥库的方法有很多,您的选择取决于您使用什么库等来建立SSL连接。 一种方法是使用启动选项,例如: -Djavax.net.ssl.trustStore=mySrvKeystore-Djavax.net.ssl.trustStorePassword=123456 最好在谷歌上搜索“keystorejava”加上你的库名(如果你正在使用的话)
HTH它仍然是加密的,但不可信。最好改为修复证书验证问题 本质上,SSL提供了加密和信任机制。您绕过了信任部分,因此消息仍将被加密,但容易被拦截或窥探,例如使用中间人攻击。MITM可以拦截请求,并使用完全不同的证书完成SSL握手。他们可以选择将您的消息转发到预期的服务器&返回,这样您就永远不会知道消息被截获了 您应该考虑下载服务器证书并将其放入信任库,该信任库可以在运行时加载 看。 keytool可执行文件与JDK捆绑在一起,您可以使用此命令行工具创建“密钥库”(在本例中称为“信任库”),并将证书导入其中 告诉Java使用密钥库的方法有很多,您的选择取决于您使用什么库等来建立SSL连接。 一种方法是使用启动选项,例如: -Djavax.net.ssl.trustStore=mySrvKeystore-Djavax.net.ssl.trustStorePassword=123456 最好在谷歌上搜索“keystorejava”加上你的库名(如果你正在使用的话) HTH使用这种信任管理器(或匿名密码套件),连接仍将被加密(假设您未启用使用空密码的密码套件,默认情况下不应启用空密码) 但是,客户端不知道与哪个实体交换秘密信息:可能是中间人攻击者。 加密是不够的:你需要知道你在和谁说话。客户需要验证:
- 它信任服务器证书是真实的(这是信任管理器的目的,但不是这个特定的实现,因为它从不拒绝任何东西)
- 此证书对于客户端要联系的主机名有效
- 它信任服务器证书是真实的(这是信任管理器的目的,但不是这个特定的实现,因为它从不拒绝任何东西)
- 此证书对于客户端要联系的主机名有效