2011-09-13 2 views
3

간단한 Java 기반 SMTP 클라이언트에 TLS 지원을 추가해야합니다. 클라이언트는 java.net.Socket을 통해 SMTP 프로토콜을 구현합니다. 즉, Java Mail 또는 다른 고급 API를 사용하지 않습니다.BouncyCastle의 경량 TLS API를 사용하는 SMTP 클라이언트

이 작업을 위해 BouncyCastle 님의 경량 TLS API를 사용하고 싶습니다. 나는 예제를 찾고 있었지만 너무 많이 찾을 수 없었습니다. 아무도 어떤 포인터를 줄 수 있습니까?

+0

왜? 왜 JSSE를 사용하지 않습니까? 10 년 동안 내장되어 있습니다. – EJP

+0

이것은 JSSE를 사용할 수없는 임베디드 하드웨어에서 실행됩니다. – Grodriguez

답변

5

내 생각에 예상보다 훨씬 쉽습니다. 이에

Socket s = new Socket(server, port); 
InputStream is = s.getInputStream(); 
InputStream os = s.getOutputStream(); 
[...] 

: 난 그냥이에서 원래 SMTP 클라이언트 코드를 수정하여 SMTP 메일 서버에 대한 보안 SSL 연결을 설정할 수

서버의 인증서가 아직 확인되지 않고

Socket s = new Socket(server, port); 
TlsProtocolHandler handler = new TlsProtocolHandler(s.getInputStream(), 
                s.getOutputStream()); 
handler.connect(new AlwaysValidVerifyer()); 
InputStream is = handler.getInputStream(); 
InputStream os = handler.getOutputStream(); 
[...] 
( AlwaysValidVerifier 아무것도 받아들이지 않는 더미 검증기입니다.)하지만 이것은 이미 좋은 시작입니다.

+0

라이브러리의 C# 버전과 함께이 방법으로 이동해야합니다. 핸드 셰이크 단계가 정상적으로 진행되며 인증서에 액세스 할 수 있지만 이후에는이 보안 연결을 통해 http 메시지를 제대로 보내고받을 수 없습니다. 문제가 발생 했습니까? DataWriter/DataReader와 함께 핸들러에서 제공하는 스트림을 사용하려고하지만 비동기 작업에서 'await'을 수행 할 때 항상 시간 초과가 발생합니다. 문제의 원인에 대한 아이디어가 있습니까? –

+0

의견이 없습니다. 죄송합니다. 위의 SMTP + TLS, 절대로 HTTP를 시도 적이 작동했습니다. – Grodriguez

관련 문제