के बाद एन्क्रिप्टेड करने के लिए जावा सॉकेट को अपग्रेड करें, मैं चाहता हूं कि मेरा ऐप STARTTLS जारी करने से पहले एन्क्रिप्शन के बिना सर्वर से बात करे और उसके बाद सॉकेट को उसके बाद एन्क्रिप्ट किया जाए। क्या मैं एक बंदरगाह से कनेक्ट कर सकता हूं (उदा।, 5222) और जावा का उपयोग कर टीएलएस का अनुरोध करने के लिए STARTTLS का उपयोग कर सकता हूं? यदि हां, तो मुझे किस सॉकेट ऑब्जेक्ट का उपयोग करना चाहिए?समस्या स्टार्टल
8
A
उत्तर
9
निश्चित रूप से आप कर सकते हैं। किसी मौजूदा सामान्य java.net.Socket लपेटकर एक सॉकेट बनाने के लिए अपने SSLSocketFactory का उपयोग करें:
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(
socket,
socket.getInetAddress().getHostAddress(),
socket.getPort(),
true);
5
@ जनवरी के जवाब मददगार था (और मैं इसके लिए मतदान किया), लेकिन मैं इसे इसके लिए काम कर पाने के लिए थोड़ा बदलाव करने के लिए किया था मुझे:
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
1
यहाँ एक संभव सुधार पर जावा 7 और जीमेल (smtp.gmail.com) के साथ परीक्षण किया गया: अपने कोड क्लाइंट पक्ष के बजाय सर्वर साइड के लिए है, तो यह जोड़ने के लिए, और यह ठीक काम करेगा:
sslsocket.setUseClientMode(false);
sslsocket.startHandshake();