简体   繁体   English

Java SSL连接被拒绝

[英]Java SSL connection refused

I am having problem connection ssl socket code where java client is simply sending a message to the python server listening. 我在连接SSL套接字代码时遇到问题,其中Java客户端只是向python服务器侦听发送一条消息。 When I run the code as localhost for both server and client, it works just fine. 当我为服务器和客户端将代码作为localhost运行时,它工作正常。 If I use the python server on my embedded board so the java client can send it data, there is a connection refused from java. 如果我在嵌入式板上使用python服务器,以便Java客户端可以向其发送数据,则存在Java拒绝的连接。 I created the self assigned certifications with the ip of the embedded board 我使用嵌入式板的ip创建了自我分配的认证

openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout privKey.key -out server.pem -subj /CN=XXX.XX.XX.XXX

I created the client certification using : 我使用以下方法创建了客户证书:

keytool -keystore clientCert -importcert -alias tS -file client.pem

But still it does not work. 但是它仍然不起作用。

I do not think it is a problem with my code since when I try the same exact code with theServerName(HOST) as localhost, the connection happens just fine. 我不认为我的代码有问题,因为当我使用与本地主机相同的ServerName(HOST)尝试相同的代码时,连接就很好了。

Here is the Python Server code : 这是Python Server代码:

import time , glob, os, sys

def deal_with_client(connstream):
    timestr = time.strftime("%Y-%m-%d_%H-%M-%S")
    outfile = open((timestr) + ".wav", 'ab')
    data = connstream.recv(1024)
    print data
    sys.exit(1)
    outfile.write(data )
    # null data means the client is finished with us
    while data:
        if not data:
            print 'no more data being sent'
            break
        data = connstream.recv(1024)
        outfile.write(data)
    # finished with client
def get_IP_Edison(value=basestring):
    IP = os.popen(value).read()
    tag1 , tag2= IP.find(":") , IP.find("n")
    return IP[tag1+1:tag2]

def start_Server():
    import ssl,socket

    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) # calling the client context to loaded with
    # configs
    key , cert = "/home/root/Coding/certificates/server/privKey.key", \
                 "/home/root/Coding/certificates/server/server.pem" # Key and cert created with OPENSSL
    context.load_cert_chain(certfile=cert, keyfile=key) # Load the certifications
    value = '''ifconfig | grep "inet " | grep -v 127.0.0.1 | grep -v 192.* | awk '{print $2}' '''
    HOST, PORT = get_IP_Edison(value), 50007 # calling the port and host / needs to be of the edison
    print "IP of the Edison : " + HOST
    bindsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # create a normal socket
    bindsocket.bind((HOST, PORT)) # Bind the socket or create it
    bindsocket.listen(5)  # make the socket listen on five connections
    print 'Listening..'
    while True:
        newsocket, fromaddr = bindsocket.accept() # accept the connection
        print 'accepted connection from' + str(fromaddr)
        connstream = context.wrap_socket(newsocket, server_side=True,do_handshake_on_connect=True) # wrap it in socket but make sure keys match
        try:
            deal_with_client(connstream) # call the receive function to receive file (more details above )
        finally:
            connstream.shutdown(socket.SHUT_RDWR)
            connstream.close()
            print 'socket was closed'

def wavFinder():
    newest = max(glob.iglob('*.[Ww][Aa][Vv]'), key=os.path.getctime)
    return newest


if __name__=='__main__':
    start_Server()
    wavFileNew = wavFinder()
    print wavFileNew

Here is my java code : 这是我的Java代码:

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

/**
 * Created by admirmonteiro on 2/18/16.
 */
public class testCertEdison {
    /** TrustStores which is for the client use**/


    final String theServerName = "XXX.XX.XX.XXX";
    final int theServerPort = 50007;
    //   final static String pathToStores = "../../Desktop/SSL_KEY/x509_Java/keyStore/ex/";
    final static String pathToStores = "/Users/admirmonteiro/Desktop/SSL_KEY/x509_Java/client/tS";
    final static String trustStoreFile = "clientCert" ; // filename
    final static String passwd = "admir2006";

    public static void main(String args[]) throws Exception {

        String trustFileName = pathToStores + "/" + trustStoreFile;
        System.setProperty("javax.net.ssl.trustStore",trustFileName);
        System.setProperty("javax.net.ssl.trustStorePassword",passwd);

        new test_certificate().doClient();

    }

    void doClient() throws Exception{
        SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket sslSocket = (SSLSocket) sslsf.createSocket(theServerName,theServerPort);

        OutputStream sslOS = sslSocket.getOutputStream();
        sslOS.write("Connected to the stupid thing".getBytes());
        sslOS.flush();
        sslSocket.close();

    }
}

Please help, I have been at this for a while. 请帮助,我已经有一段时间了。

'Connection refused' means there was nothing listening at the IP:port you tried to connect to. “拒绝连接”表示您尝试连接的IP:端口没有监听。

It has nothing to do with truststores or keystores or certificates or SSL or Python or Java or OpenSSL. 它与信任库或密钥库或证书或SSL或Python或Java或OpenSSL无关。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM