Java SSL服务器套接字和具有已知证书的握手

Java SSL服务器套接字和具有已知证书的握手,java,security,ssl,x509certificate,serversocket,Java,Security,Ssl,X509certificate,Serversocket,我不熟悉SSl服务器套接字。我要做的就是通过SSL读取数据。 我的应用程序侦听端口8000。请告诉我如何做到这一点。当我有证书(在光盘上)时,如何建立SSL服务器套接字并从客户端读取 这是我的步骤 1) 从文件读取server.crt并生成X509Certificate(具有公共证书和私钥) 2) 获取JKS密钥库的实例 3) 获取上下文的实例 4) 通过端口创建服务器套接字(8000) 我得到了问题的答案,我研究了如何使用自签名证书建立自己的密钥库。这样对我有帮助 ping我以获得详细的解决方

我不熟悉SSl服务器套接字。我要做的就是通过SSL读取数据。 我的应用程序侦听端口8000。请告诉我如何做到这一点。当我有证书(在光盘上)时,如何建立SSL服务器套接字并从客户端读取

这是我的步骤

1) 从文件读取server.crt并生成X509Certificate(具有公共证书和私钥) 2) 获取JKS密钥库的实例

3) 获取上下文的实例

4) 通过端口创建服务器套接字(8000)


我得到了问题的答案,我研究了如何使用自签名证书建立自己的密钥库。这样对我有帮助

ping我以获得详细的解决方案。

我是在调试“无效:[会话1,SSL\u NULL\u带\u NULL\u NULL]”时得到这个消息的
InputStream in = new DataInputStream(new FileInputStream(new File("server.crt")));
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null, null);

CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(in);
in.close();

ks.setCertificateEntry("dts", cert);

char[] newpass = "password".toCharArray();
String name = "mykeystore.ks";
FileOutputStream output = new FileOutputStream(name);
ks.store(output, newpass);

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "password".toCharArray());




try{

    System.setProperty("javax.net.ssl.keyStore","mykeystore.ks");
    System.setProperty("javax.net.ssl.keyStorePassword","password");
    System.setProperty("javax.net.debug","all");



    SSLContext context = SSLContext.getInstance("TLSv1.2");
    context.init(kmf.getKeyManagers(), null, null);
    SSLServerSocketFactory sslServerSocketfactory = context.getServerSocketFactory();
    SSLServerSocket sslServerSocket = (SSLServerSocket)sslServerSocketfactory.createServerSocket(8000);
    SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept();  


    InputStream dataIN = sslSocket.getInputStream();

    byte[] hello = new byte[20];

    dataIN.read(hello);
    System.out.println(new String(hello));

    dataIN.close();

} catch (IOException e){
    e.printStackTrace();
}