繁体   English   中英

在发出问题后将Java套接字升级到加密

[英]Upgrade Java socket to encrypted after issue starttls

我希望我的应用在发出STARTTLS之前先与服务器进行加密,然后再将套接字升级为加密的。 我可以连接到端口(例如5222)并使用STARTTLS通过Java请求TLS吗? 如果是这样,我应该为此使用哪个Socket对象?

你当然可以。 使用SSLSocketFactory创建一个包装现有常规java.net.Socket的套接字:

    SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(
        socket,
        socket.getInetAddress().getHostAddress(),
        socket.getPort(),
        true);

@Jan的回答是有帮助的(我投了赞成票),但我不得不对其进行一些调整以使其对我有效:

SSLSocket sslSocket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(
                       socket, 
                       socket.getInetAddress().getHostAddress(), 
                       socket.getPort(), 
                       true);
InputStream inputStream = sslSocket.getInputStream();
OutputStream outputStream = sslSocket.getOutputStream();
// reads from the socket
Scanner scanner = new Scanner(inputStream);
// writes to the socket
OutputStream outputStream = new BufferedOutputStream(outputStream);

在端口587上使用Java 7和GMail(smtp.gmail.com)进行了测试。

这可能是一种改进:如果您的代码是针对服务器端而不是客户端的,请添加此代码,它将正常工作:

sslsocket.setUseClientMode(false); 
sslsocket.startHandshake();

暂无
暂无

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

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