2017-05-23 1 views
1

HttpsURLConnection이 열려 있습니다. 어떻게 내 SSL 소켓을이 연결에 연결할 수 있습니까? 다른 ssl 핸드 셰이크를하지 말고 내 암호를 변경하지 마십시오.이미 열린 SSL에서 SSL 소켓을 여는 방법 Session java

URL url = new URL ("https://example.com:8080"); 
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); 
connection.connect(); 

SSLSocketFactory ssf = connection.getSSLSocketFactory(); 
SSLSocket socket = (SSLSocket) ssf.createSocket("example.com", 8080); 

// 여기 https 연결과 동일한 SSL 세션에있는 소켓으로 메시지를 보내려고합니다.

BufferedWriter out = new BufferedWriter(
         new OutputStreamWriter(s.getOutputStream())); 
out.write("Hello"); 
out.flush(); 
out.close(); 

Java에서 실제로 그렇게 할 것입니까?

+0

내가 두 번째 블록의 s'가'정말 socket'입니다'가정 나는 8080 HTTPS에 대한 독특하고 혼란 포트주의 두 번째 블록이 수행하는 것처럼 HTTP/SSL/TLS가 훨씬 적습니다. –

+0

@ dave_thompson_085 : 포트 8080은 라우터 및 프록시 등에서 일반적으로 사용됩니다. –

+0

@ dave_thompson_085 : 443 번 포트에 대해 알고 있습니다.이 예제를 제공하십시오. 이건 내 질문이 아니야. 네 소켓으로 죄송합니다 : - D – Vik

답변

-1

AFAIK 주변에 엉망하지 않은 제공해야합니다, 당신은 기존의 SSL 세션에 새로운 소켓을 첨부 할 수 없습니다. 원래 SSL 세션에서 데이터를 보내거나 읽으려면 URLConnection 개체가 생성 한 원래 소켓 연결을 사용하십시오. 당신은 그것을 위해 입력/출력 스트림을 얻기 위해 URLConnection.getInputStream()URLConnection.getOutputStream() 방법을 사용할 수 있습니다

URL url = new URL ("https://example.com:8080"); 
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); 
connection.connect(); 

... 

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); 
out.write("Hello"); 
out.flush(); 
out.close(); 
+0

Java는 기본적으로 세션 공유를 수행합니다. 시도 해봐. – EJP

+0

@Vik : 왜? 당신은 정말로 무엇을 성취하려고합니까? HTTPS 프록시를 통해 임의의 TCP 서버에 연결 한 다음 연결이 설정된 후 임의의 데이터를 보내려는 것처럼 들립니다. 그럴까요? 또는 실제 HTTPS 서버와 실제로 통신하고 있습니까? –

+0

@RemyLebeau, 죄송합니다, 다른 문제를 발견했습니다. 내 작업은 단일 SSL 세션에서 다른 https 요청을 보내는 것이 었습니다. 그 대답은 단지 같은 소스 포트에서 요청을 보내는 것입니다. – Vik

1

그것은 한 세션이 유효한 상태로, 기본적으로 그런 식으로, 당신은 SSLContexts.

+1

그리고 서버가 sessionid 할당하고 캐시 않았다; 거의 모두. –

+0

그리고 반대로 서버가 sessionID를 할당하고 캐시하지 않은 경우 재개 할 세션이 없으므로 불가능합니다. @ dave_thompson_085 – EJP

관련 문제