标签: jsse

java安全套接字没有认证?

我有一个简单的安全套接字服务器 - 客户端程序.
对于服务器证书,我使用keytool创建了一个密钥库.
当我尝试通过我的客户端连接到服务器时,我得到以下异常:
在服务器中:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Run Code Online (Sandbox Code Playgroud)

在客户端:

Exception in thread "main" 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
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确的,那么这些例外是由于我使用我创建的证书这一事实引起的.
我的问题如下:
如果我在服务器和客户端中设置启用的密码套件,所有*_anon*密码套件,这不应该解决问题吗?
我的意思是如果我启用*_anon_*密码套件,则不需要身份验证,因此没有例外.
它是否正确?
因为我仍然有例外.我尝试在启用的密码套件中启用所有已启用的+ _anon密码套件.没有成功.我尝试只设置anon并获得一个新例外:

Exception in thread "main" java.lang.IllegalArgumentException: Name must not be null
Run Code Online (Sandbox Code Playgroud)

有人可以用anon密码套件解释为什么我会得到这些例外吗?
注意:
如果我在客户端上设置javax.net.ssl.trustStore指向我创建并由我的服务器使用的密钥库的系统属性,则通信正常!
该程序无异常,数据从客户端发送到服务器.


更新:
这是我用来启用匿名密码的片段(我已经为服务器和客户端部分做了这个):

String[] supported = server.getSupportedCipherSuites();
String[] anonCipherSuitesSupported = new String[supported.length];
int count = 0;

for(int …
Run Code Online (Sandbox Code Playgroud)

java ssl jsse keytool truststore

2
推荐指数
1
解决办法
5739
查看次数

Java JSSE SSLEngine无法恢复SSL会话

我正在编写一个使用SSLEngine和NIO的应用程序,我编写了客户端和服务器.客户端能够连接到服务器,在他连接后,我希望他能够执行会话恢复/重新协商,但目前没有运气..

由于使用SSLEngine的代码非常大(SSLEngine的使用非常复杂!),我将编写一个简单的伪代码来演示这种情况:

Server:
    global sslcontext initialized once
    await new client
    client.sslEngine = create new server ssl engine using the global sslcontext
    client.handleHandshake and wait for it to be done
    handle client.

Client:
    global sslcontext initialized once
    sslEngine = create new client ssl engine using the global sslcontext
    performHandshake and wait for it to be done
    disconnect (close gracefully the connection)
    sslEngine = create new client ssl engine using the global sslcontext
    configure engine to not allow session creation
    performHandshake and …
Run Code Online (Sandbox Code Playgroud)

java ssl jsse sslengine

2
推荐指数
1
解决办法
2898
查看次数

将证书密钥库迁移到另一个 JVM

我正在开发一个需要 JRE 并创建证书的安装程序。我正在开发下一个版本的安装程序,它捆绑了一个新的 JRE。我需要将旧 JRE 的cacerts密钥库中导入的所有证书移至新 JRE。如果我将旧的 jre/lib/security/ 目录下的“cacerts”文件复制到新的 JRE,cacerts 中的现有证书是否有效,我将进行安装。

我查看了问题:“是否可以将 cacerts 的所有内容导入到 jssecacerts 文件中?” 将证书导入我的密钥库。这是否意味着如果通过复制 cacerts 进行密钥库迁移不起作用,我需要备份现有的 jre/lib/security/cacerts 并将其导入到新的 JRE 中?

java security jsse

2
推荐指数
1
解决办法
7387
查看次数

如何在eclipse中将服务器证书添加到java应用程序中

我有一个服务器应用程序,它使用:

import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
Run Code Online (Sandbox Code Playgroud)

这是一个java应用程序,它本身就是一个服务器 - 我没有使用任何虚拟服务器,也不是Web应用程序.它应该从客户端应用程序接收连接并处理它们的请求.客户端应用程序和数据库之间的夹层.

在启动它确实运行,但保持垃圾邮件(导致while(true){})此错误:

javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

所以,我查找了一些SSL证书创建指南,并使用这些命令制作了证书:

keytool -genkey -alias serverprivate -keystore servestore -keyalg rsa -keysize 2048
keytool -export -alias serverprivate -keystore servestore -rfc -file server.cer
Run Code Online (Sandbox Code Playgroud)

并将其导入我的本地证书存储,因此我可以使用我的客户端应用程序进行测试:

keytool -import -alias trustservercert -file server.cer -keystore clienttruststore
Run Code Online (Sandbox Code Playgroud)

所有这些都是在我的$ JAVA_HOME\bin目录中完成的.我还更新了我的eclipse.ini文件

-vm
$JAVA_HOME\bin\javaw.exe
Run Code Online (Sandbox Code Playgroud)

所以eclipse将使用我的jdk7虚拟机来运行应用程序.

同时,我试图复制server.cerservestore文件到这两个$ ECLIPSE_HOME和应用程序的主目录.

结果是:相同的错误消息.它不会阻止应用程序运行,但它仍然存在.

非常感谢这里的一些帮助.我究竟做错了什么?也许有一个很酷的,详细的,新手友好的指南,用SSL创建应用程序,我找不到?

java ssl jsse keytool ssl-certificate

2
推荐指数
1
解决办法
2万
查看次数

如何将OpenSSL的密码列表映射到Java JSSE

我已经按照强化您的网络服务器ssl密码指南建议使用

ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
Run Code Online (Sandbox Code Playgroud)

但是我正在尝试配置基于纯Java(Tomcat,Jetty)的WebServer,而不是基于Apache或OpenSSL的Web服务器.如何确定哪个JSSE密码名称对应的结果

openssl ciphers -V 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS'
Run Code Online (Sandbox Code Playgroud)

tomcat openssl jetty jsse

2
推荐指数
2
解决办法
7009
查看次数

在Play Framework 1.2.7中使用的Netty的SSL处理程序中处理多个证书

我有一个Java密钥库,我为每个客户的子域存储证书.我打算使用服务器别名来区分密钥存储区中的多个客户,如此处所示.Play框架1.2.7使用Netty的SslHandler来支持服务器端的SSL.我尝试实现使用此解决方案的自定义SslHttpServerContextFactory .

import play.Play;

import javax.net.ssl.*;
import java.io.FileInputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.security.KeyStore;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Properties;

public class CustomSslHttpServerContextFactory {

  private static final String PROTOCOL = "SSL";
  private static final SSLContext SERVER_CONTEXT;

  static {

    String algorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
    if (algorithm == null) {
      algorithm = "SunX509";
    }

    SSLContext serverContext = null;
    KeyStore ks = null;
    try {
      final Properties p = Play.configuration;

      // Try to load it from …
Run Code Online (Sandbox Code Playgroud)

ssl jsse keystore netty playframework-1.x

2
推荐指数
1
解决办法
2233
查看次数

如何获得SSL握手中生成的对称密钥?

在SSL握手期间,客户端使用服务器的公钥加密生成的预主密钥并发送到服务器.服务器和客户端都执行步骤以使用约定的密码生成主密钥.客户端和服务器都使用主密钥生成会话密钥,这些密钥是用于加密和解密SSL会话期间交换的信息的对称密钥

http://www.symantec.com/connect/blogs/how-does-ssl-work-what-ssl-handshake

如何获取对称密钥,以便我可以将其存储到数据库中,并在每次客户端连接时使用相同的密钥?

服务器和客户端都应保存该密钥,并且永远不再进行握手过程.下次(即使断开连接后),他们应该使用https上的对称密钥直接启动通信.

简而言之,我希望SSL会话永远持续下去.

编辑 Android设备是客户端.每当客户端上线时,客户端 - 服务器仅交换少量字节数据.在这种情况下SSL是开销,不是吗?

java ssl https jsse tomcat8

0
推荐指数
1
解决办法
847
查看次数

WildFly 11 - 使用证书发出 https 请求

我有点不知道如何在 WidlFly 11 中使用证书。我查阅了文档,发现了很多术语,例如 JSSE、OpenSSL、Elytron、ApplicationRealm。当我执行代码时出现问题

final URL url = new URL("https://someUrl");
HttpsURLConnection httpURLConnection = (HttpsURLConnection)url.openConnection();
Run Code Online (Sandbox Code Playgroud)

抛出此异常sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

那么,具体需要配置什么呢?我尝试了Elytron Documentation中的“为应用程序启用单向 SSL/TLS”部分,但没有成功。

ps:我正在使用 java 9.01 ps2:我正在使用standalone-full.xml

如果您需要更多信息,请告诉我

java certificate jsse wildfly wildfly-11

0
推荐指数
1
解决办法
6638
查看次数