안전한 통신 JSSE (Java Secure Sockets Extension)

Slides:



Advertisements
Similar presentations
Computer Network Lab 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진.
Advertisements

Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL Section 3 : TCP 소켓 Section 4 : UDP 소켓.
HTTPS Packet Capture Tutorial

목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
표준 SSL Server Identification
네트워크 프로그래밍 및 실습.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ch.07-5 xml-rpc 사용하기 김상엽.
암호화 기술 SSL와 IPSec의 개요 및 동작과정
Network Lab. Young-Chul Hwang
Secure Socket Layer.
HeartBleed.
자바 암호 프로그래밍 Java Cryptography Programming
자바 암호 프로그래밍 Java Cryptography Programming
Chap11 네트워킹 11.1 네트워킹의 개요와 java.net 패키지 11.2 인터넷 주소와 URL 11.3 TCP 소켓
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
명품 JAVA Programming 제 16 장 네트워크.
Lesson 6. 형변환.
명품 JAVA Programming 제 16 장 네트워크.
8장. 원격지 시스템 관리하기.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
정보화 사회와 컴퓨터 보안.
NJM Messenger 박상원 박연호.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
Java의 정석 제 15 장 네트워킹(Networking) Java 정석 남궁성 강의
Servlet 서블릿 기초 FORM 처리 서블릿의 API 세션과 쿠키 com.oreilly.servelet 패키지
15장 네트워킹 15.1 네트워킹의 개요와 java.net 패키지 15.2 인터넷 주소와 URL 15.3 TCP 소켓
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
RMI Messenger 지도 : 김정배 교수님 조봉진.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 암호 프로그래밍 Java Cryptography Programming
8장 쿠키와 세션 한빛미디어(주).
오라클 넷(Oracle Net)의 개념 및 구성
KERBEROS.
자바 5.0 프로그래밍.
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
SSL, Secure Socket Layer
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
웹 어플리케이션 보안 2016년 2학기 11. Enhancing Security.
Introduction to JSP & Servlet
오라클 11g 보안.
 파일 아카이브와 압축 명령 익히기.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
3. 모듈 (5장. 모듈).
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
MIDP 네트워크 프로그래밍 ps lab 김윤경.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
JSP Programming with a Workbook
Network Lab. Young-Chul Hwang
CHAP 15. 데이터 스토리지.
Presentation transcript:

안전한 통신 JSSE (Java Secure Sockets Extension) 소켓과 서버 소켓을 생성 암호 알고리즘은 각국의 보안법에 제한되므로 JDK에 포함되지 못함 JSSE라는 이름의 표준 확장 형태로 제공 확장 패키지에 담긴 내용 SSL ( Secure Socket Layer) 버전 3 TLS ( Transport Layer Secure) 프로토콜 JDK 의 부가 패키지

안전한 통신 안전한 통신 비밀키(대칭키, secret key) 공개키(비대칭키, public key) 데이터를 암호화 하고 해독하는데 동일한 키 사용 속도가 빠름 대칭키 누출시 데이터 공개 공개키(비대칭키, public key) 데이터를 암호화 하고 해독하는데 서로 다른 키 사용 공개키는 배포하고 암호 해독용 전용키는 보관 비밀성, 인증, 무결성을 모두 얻을 수 있음 중간자 공격( man-in-the-middle attack) 신뢰할 만한 인증 기관에서 공개키를 검사하여 저장하는 방법으로 해결

안전한 통신 JSSE의 패키지 javax.net.ssl javax.net javax.security.cert 안전한 네트워크 통신을 위한 자바 API를 정의하는 추상 클래스 javax.net 안전한 소켓을 생성하기 위해 생성자 대신 사용하는 추상 소켓 팩토리 클래스 javax.security.cert SSL에 필요한 공개키 인증을 처리하는 최소한의 클래스 집합 com.sun.net.ssl JSSE 에 대해 암호화 알고리즘과 프로토콜을 구현한 클래스

안전한 통신 설치 방법 JSSE 다운로드 아카이브 복사 Jre/lib/ext 디렉토리로 이동 ( 또는 클래스 패스 설정) 필요한 아카이브 Jcert.jar, jnet.jar, jsse.jar jre/lib/ext/security/java.security 파일 편집 security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.rsajca.Provider 위의 두줄을 찾고 아래의 한줄을 추가 security.provider.3=com.sun.net.ssl.internal.ssl.Provider

안전한 클라이언트 소켓 생성하기 Socket 객체 생성하기 public abstract class SSLSocketFactory extends SocketFactory 사용 SSLSocketFactory.getDefault() 메소드를 사용 Public static SocketFactory getDefault() throws InstantiationException createSocket() 메소드 public abstract Socket createSocket(String host, int port) throws IOException, UnknownHostException public abstract Socket createSocket(InetAddress host, int port) throws IOException public abstract Socket createSocket(String host, int port, InetAddress interface, int localPort) public abstract Socket createSocket(InetAddress host, int port, public abstract Socket createSocket(Socket proxy, String host, int port, boolean autoClose) throws IOException

안전한 클라이언트 소켓 생성하기 안전한 소켓 사용예 try { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider( )); SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault( ); Socket socket = factory.createSocket("login.metalab.unc.edu", 7000); Writer out = new OutputStreamWriter(socket.getOutputStream( ), "ASCII"); out.write("Name: John Smith\r\n"); out.write("Product-ID: 67X-89\r\n"); out.write("Address: 1280 Deniston Blvd, NY NY 10003\r\n"); out.write("Card number: 4000-1234-5678-9017\r\n"); out.write("Expires: 08/05\r\n"); out.flush( ); out.close( ); socket.close( ); } catch (IOException e) { e.printStackTrace(

SSLSocket 클래스의 메소드 암호 조합 선택하기 JSSE 는 인증 방법이나 암호화 알고리즘을 서로 다른 암호 조합으로 지원 가능 public abstract String[] getSupportedCipherSuites() 주어진 소켓에 대해 어떤 알고리즘의 조합이 사용 가능한지 알려줌 public abstract String[] getEnabledCipherSuites() 해당 소켓에서 실제로 사용할 수 있는 암호 조합 public abstract void setEnabledCipherSuites(String[] suites) 클라이언트가 사용하려는 조합 바꾸기

SSLSocket 클래스의 메소드 구현하여 제공하는 암호화 알고리즘 기타 암호 조합 SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 기타 암호 조합 SSL_DH_anon_WITH_DES_CBC_SHA SSL_DH_anon_WITH_3DES_EDE_CBC_SHA SSL_DHE_DSS_WITH_DES_CBC_SHA SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA SSL_RSA_WITH_RC4_128_MD5 SSL_RSA_WITH_RC4_128_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_3DES_EDE_CBC_SHA SSL_DH_anon_WITH_RC4_128_MD5

SSLSocket 클래스의 메소드 이벤트 핸들러 public interface HandshakeCompletedListener extends java.util.EventListener 이벤트 정보를 얻기 위한 메소드 public SSLSession getSession( ) public String getCipherSuite( ) public X509Certificate[] getPeerCertificateChain( ) throws SSLPeerUnverifiedException public SSLSocket getSocket( ) 등록하기 위한 메소드 public abstract void addHandshakeCompletedListener( HandshakeCompletedListener listener) public abstract void removeHandshakeCompletedListener( HandshakeCompletedListener listener) throws IllegalArgumentException

SSLSocket 클래스의 메소드 세션관리 세션 관련 메소드 public byte[] getId( ) public SSLSessionContext getSessionContext( ) public long getCreationTime( ) public long getLastAccessedTime( ) public void invalidate( ) public void putValue(String name, Object value) public Object getValue(String name) public void removeValue(String name) public String[] getValueNames( ) public X509Certificate[] getPeerCertificateChain( ) throws SSLPeerUnverifiedException public String getCipherSuite( ) public String getPeerHost( )

SSLSocket 클래스의 메소드 클라이언트 모드 public abstract void setUseClientMode(boolean mode) throws IllegalArgumentException 이 소켓이 첫번째 핸드셰이킹에서 인증을 해야 하는지 결정 public abstract boolean getUseClientMode( ) 이 소켓이 첫번째 헨드셰이킹에서 인증법을 사용하였는지 여부를 리턴 public abstract void setNeedClientAuth(boolean needsAuthentication) throws IllegalArgumentException 서버에 연결 되어 있는 모든 클라이언트가 스스로를 인증해야 하는지 여부를 설정 public abstract boolean getNeedClientAuth( ) 소켓이 클라이언트 쪽에서 인증 되어야 하게 설정 되었는지 여부를 리턴

안전한 서버 소켓 생성하기 안전한 서버 소켓 생성 방법 public abstract class SSLServerSocketFactory extends ServerSocketFactory 에서 생성 SSLServerSocketFactory 의 createServerSocket() 메소드 public abstract ServerSocket createServerSocket(int port) throws IOException public abstract ServerSocket createServerSocket(int port, int queueLength) throws IOException int queueLength, InetAddress interface) throws IOException

안전한 서버 소켓 생성하기 안전한 서버 소켓을 생성하기 위한 필요 사항 keytool 을 이용하여 공개키를 생성하고 인증 신뢰할 말한 인증기관이 인증한 인증서를 획득 사용할 알고리즘에 해당하는 SSLContext를 생성 사용할 인증서에 해당하는 TrustManagerFactory를 생성 사용할 키의 타입에 맞는 KeyManagerFactory를 생성 키와 인증서 데이터베이스에 대한 keyStore 객체를 생성 키와 인증서로 KeyStore객체를 채움 KeyStore 와 패스 구절로 KeyManagerFactory를 초기화 KeyManagerFactory 에서 키 매니저를, TrustManagerFactory 에서 신뢰 매니저를, 그리고 무작위의 소스로 컨텍스트를 초기화 함

SSLServerSocket 클래스의 메소드 암호 조합 선택하기 어떤 암호 조합을 사용할 수 있는지 결정하는 메소드 public abstract String[] getSupportedCipherSuites( ) public abstract String[] getEnabledCipherSuites( ) public abstract void setEnabledCipherSuites(String[] suites) 세션관리 세션 관리에 관계된 메소드 public abstract void setEnableSessionCreation(boolean allowSessions) public abstract boolean getEnableSessionCreation( ) 클라이언트 모드 클라이언트 모드 관련 메소드 public abstract void setNeedClientAuth(boolean flag) public abstract boolean getNeedClientAuth( ) public abstract void setUseClientMode(boolean flag) public abstract boolean getUseClientMode( )