1 / 14

안전한 통신

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

Download Presentation

안전한 통신

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 안전한 통신 • 설치 방법 • JSSE 다운로드 • http://java.sun.com/products/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

  5. 안전한 클라이언트 소켓 생성하기 • 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) throws IOException, UnknownHostException • public abstract Socket createSocket(InetAddress host, int port, InetAddress interface, int localPort) throws IOException, UnknownHostException • public abstract Socket createSocket(Socket proxy, String host, int port, boolean autoClose) throws IOException

  6. 안전한 클라이언트 소켓 생성하기 • 안전한 소켓 사용예 • 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( • }

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

  8. 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

  9. 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

  10. 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( )

  11. 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( ) • 소켓이 클라이언트 쪽에서 인증 되어야 하게 설정 되었는지 여부를 리턴

  12. 안전한 서버 소켓 생성하기 • 안전한 서버 소켓 생성 방법 • 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 • public abstract ServerSocket createServerSocket(int port, int queueLength, InetAddress interface) throws IOException

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

  14. 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( )

More Related