Notice
Recent Posts
Recent Comments
준호씨의 블로그
javamail 로 메일 발송 시 SSLv2Hello 이용해서 SSLv3 사용하기. ssl/tls 버전 지정하기. 본문
반응형
요지는 mail.smtp.ssl.protocols 에 "SSLv2Hello SSLv3" 를 지정하는 것이다. 아래 처럼 property 에 추가 하면 된다.
props.put("mail.smtp.ssl.protocols", "SSLv2Hello SSLv3");
만약 SSLv2Hello 를 하지 않고 처음부터 SSLv3 를 사용하려면 SSLv3 만 넣으면 된다.
실행 할 때 VM options 에 아래 내용을 추가 하면 Handshake 과정을 찍어 볼 수 있다.
-Djavax.net.debug=ssl,handshake
SSLv2 client hello message 를 날린 다음 SSLv3 Handshake 를 하고 있다.
main, WRITE: SSLv3 Handshake, length = 175
main, WRITE: SSLv2 client hello message, length = 98
main, READ: SSLv3 Handshake, length = 3558
*** ServerHello, SSLv3
대략 풀 소스는 다음과 같다.
String host = "mail-host";
String port = "25";
String subject = "test subject";
String body = "test message";
String from = "junho85@daum.net";
String to = "test@example.com";
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", true);
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.ssl.protocols", "SSLv2Hello SSLv3"); // 이 부분이 중요!!
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress toAddress = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
transport.close();
http://security.stackexchange.com/questions/34827/why-clients-offer-handshaking-with-ssl-2-0-protocol 의 댓글에 의하면 일단 SSLv2Hello 를 했지만 SSLv3 사용이 가능 하면 SSLv3 를 사용한다고 한다.
참고로 Java 는 SSLv2 자체는 지원하지 않고 SSLv2Hello 까지만 지원한다. 실제 통신은 SSLv3 로 하는데 Hello 만 SSLv2 로 하는 것이다.
JDK 버전에 따라 기본적으로 활성화 되어 있는 Protocol 의 버전이 다르기 때문에 미리 좀 확인 해 볼 필요는 있다.
현재 java 에서는 SSLv3, SSLv2Hello, TLSv1, TLSv1.1, TLSv1.2 를 지원하고 있는데 JDK 마다 지원하는 버전이 다르고 최근에는 SSLv3 는 기본적으로 비활성화 되어 있기도 하다.
참고
반응형
'개발이야기 > 이메일시스템' 카테고리의 다른 글
sendmail - build with TLS support (0) | 2018.01.19 |
---|---|
sendmail 로그 항목 풀이 (0) | 2016.04.18 |
이메일발송 서비스 사이트들. Amazon SES, mandrill, mailgun, sendgrid 등 (0) | 2016.03.03 |
java imap folder name utf7 decode (0) | 2015.01.14 |
linux shell 에서 telnet SMTP 로 메일 발송하기 (2) | 2014.03.28 |
Comments