java - ServerSocket 在转换为 SSLSocket 时不接受(空指针异常)

标签 java sockets ssl networking

<分区>

我一直在尝试将使用套接字在 Java 中创建的客户端/服务器模型转换为 SSL。在生成包含服务器根文件和中间文件的 PKCS12 文件后,我使用 System.setProperty 将客户端和服务器文件中的信任和 keystore 更改为 PKCS 文件。我不太确定这是否是您的本意。我还对套接字进行了更改,使用 SSLSocketFactory 创建必要的套接字。

这是下面的代码。 客户:

`public class Client 
{
    private SSLSocket client_socket;
    private DataOutputStream output_stream;
    private FileReader reader;
    private BufferedReader buffer_reader;
public Client(String address, int port)
{
    System.setProperty("javax.net.ssl.keyStore", "wa.p12");
    System.setProperty("javax.net.ssl.keyStorePassword", "namihana");
    System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
    System.setProperty("javax.net.ssl.trustStore", "wa.p12");
    System.setProperty("javax.net.ssl.trustStorePassword", "namihana");
    System.setProperty("javax.net.ssl.TrustStoreType", "PKCS12");
//  System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
    Security.addProvider(new Provider());

    try
    {
    SSLSocketFactory ssf =  (SSLSocketFactory) SSLSocketFactory.getDefault();
    client_socket = (SSLSocket) ssf.createSocket("127.0.0.1", 8072);
    client_socket.startHandshake();

 public class Server
{
    public Socket socket_2;
    public SSLServerSocket server_socket;
    public InputStreamReader input_stream;
    private BufferedReader buffer_reader;
    private DataOutputStream output_sender;
    private PrintWriter output_writer; 
    private boolean result;
    private char[] multichoice_answers;

服务器:

public Server(int port)
        {
            System.setProperty("javax.net.ssl.keyStore", "wa.p12");
            System.setProperty("javax.net.ssl.keyStorePassword", "namihana");
            System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
            System.setProperty("javax.net.ssl.trustStore", "wa.p12");
            System.setProperty("javax.net.ssl.trustStorePassword", "namihana");
            System.setProperty("javax.net.ssl.TrustStoreType", "PKCS12");
             multichoice_answers = new char[30];
             multichoice_answers[0] = 'A';
             multichoice_answers[1] = 'A';
             multichoice_answers[2] = 'D'; 
             multichoice_answers[3] = 'C';
             multichoice_answers[4] = 'C';
             multichoice_answers[5] = 'C';
             multichoice_answers[6] = 'D';
             multichoice_answers[7] = 'B';
             multichoice_answers[8] = 'D';
             multichoice_answers[9] = 'B';
             multichoice_answers[10] = 'C';
             multichoice_answers[11] = 'D';
             multichoice_answers[12] = 'A';
             multichoice_answers[13] = 'D';
             multichoice_answers[14] = 'C';

            try
        {
            SSLServerSocketFactory ssf =  (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
            SSLServerSocket server_socket =  (SSLServerSocket) ssf.createServerSocket(port); 
            System.out.println("Server_socket made");
            Security.addProvider(new Provider()); 
            //server_socket.setSoTimeout(100000); 
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
     }


    public void receive()
    {
        try
        {
             System.out.println("Server connected2");   
             socket_2 =   server_socket.accept();

最佳答案

您的 try block 中有一个本地 ServerSocket 变量正在隐藏类成员。

关于java - ServerSocket 在转换为 SSLSocket 时不接受(空指针异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472933/

上一篇:java - Jboss EAP 7 - REST API 客户端的动态 SSL 身份验证

下一篇:amazon-web-services - 如何在 AWS EC2 和 ELB 上使用在 Godaddy 注册的域实现 SSL 证书

相关文章:

java - 将 HIbernate 与 Spring 的 @Transactional Annotation 结合使用,数据不会持续存在

java - OutputSteam 是抽象的

java - TCP 数据接收顺序错误/丢失

amazon-web-services - 为 S3 启用 SSL,默认提供 index.html

linux - 如何在异常情况下强制 HTTP 转换为 HTTPS?

java - 在没有 Spark 控制台的情况下使用 Apache Spark MLib 库

java - 改变 GridLayout 的宽度

java - 制作链表

c++ - 套接字发送调用被阻塞了这么久

azure - 如何修复 "Http11NioProtocol: Error reading request, ignored"