패키지 | flash.net |
클래스 | public class SecureSocket |
상속 | SecureSocket Socket EventDispatcher Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
AIR 프로파일 지원: 이 기능은 모든 데스크톱 운영 체제에서 지원되지만 AIR for TV 장치에서는 지원되지 않습니다. 휴대 장치에서는 Android에서 지원되며, AIR 20부터는 iOS에서도 지원됩니다. SecureSocket.isSupported
속성을 사용하여 런타임에 지원을 테스트할 수 있습니다. 여러 프로파일 간 API 지원에 대한 자세한 내용은 AIR 프로파일 지원을 참조하십시오.
SSL/TLS 프로토콜은 다음과 같은 보안 소켓 연결의 두 가지 측면을 모두 처리하기 위한 메커니즘을 제공합니다.
- 소켓을 통한 데이터 통신의 암호화
- 해당 인증서를 통한 호스트 ID의 인증
지원되는 암호화 프로토콜은 SSL 3.1 이상 및 TLS 1.0 이상입니다. TLS는 SSL의 후속 프로토콜입니다. TLS 1.0은 SSL 3.1과 같고 TLS 1.1은 SSL 3.2와 같으며 다른 경우도 마찬가지입니다. SSL 버전 3.0 이하는 지원되지 않습니다.
서버 인증서의 유효성 검사는 신뢰 저장소와 클라이언트 플랫폼의 인증서 유효성 검사 지원을 사용하여 수행됩니다. 또한 addBinaryChainBuildingCertificate()
메서드를 사용하여 고유한 인증서를 프로그래밍 방식으로 추가할 수 있습니다. 현재 이 API는 iOS에서 지원되지 않습니다. iOS에서 이 API를 사용하면 "ArgumentError: Error #2004" 예외가 발생합니다.
SecureSocket 클래스에서는 유효하고 신뢰할 수 있는 인증서가 있는 서버에만 연결합니다. 따라서 사용자가 인증서에 문제가 있는 서버에 연결하도록 선택할 수는 없습니다. 예를 들어 만료된 인증서를 사용하여 서버에 연결할 수 있는 방법은 없습니다. 신뢰할 수 있는 앵커 인증서에 체인으로 연결되지 않은 인증서의 경우도 마찬가지입니다. 인증서가 유효한 경우에도 연결이 설정되지 않습니다.
SecureSocket 클래스는 신뢰할 수 있는 서버에 대한 암호화된 연결을 수행할 때 유용합니다. 그 밖의 경우에는 SecureSocket 객체가 일반 Socket 객체처럼 동작합니다.
SecureSocket 클래스를 사용하려면 SecureSocket 객체를 만듭니다(새 SecureSocket()
). 다음으로 리스너를 설정하고 SecureSocket.connect(host, port)
를 실행합니다. 서버에 성공적으로 연결되면 소켓은 connect
이벤트를 전달합니다. 서버의 보안 프로토콜이 지원되고 해당 인증서가 신뢰할 수 있는 유효한 인증서인 경우 성공적으로 연결된 것입니다. 인증서 유효성을 확인할 수 없는 경우 소켓이 IOError
이벤트를 전달합니다.
중요: OCSP(온라인 인증서 상태 프로토콜) 은 모든 운영 체제에서 지원되지 않습니다. 사용자는 각 컴퓨터에서 OCSP 확인을 해제할 수도 있습니다. OCSP가 지원되지 않거나 해제되어 있고 인증서에 CRL(인증서 해지 목록)을 사용하여 해지를 확인하는 데 필요한 정보가 포함되어 있지 않으면 인증서 해지가 확인되지 않습니다. 인증서가 이러한 조건이 아니었을 때 유효한 경우 수락됩니다. 따라서 서버에서 해지된 인증서를 사용할 수 있습니다.
관련 API 요소
속성 | 정의 주체 | ||
---|---|---|---|
bytesAvailable : uint [읽기 전용]
입력 버퍼에서 읽을 수 있는 데이터 바이트 수입니다. | Socket | ||
bytesPending : uint [읽기 전용]
쓰기 버퍼에 남아 있는 바이트 수를 나타냅니다. | Socket | ||
connected : Boolean [읽기 전용]
이 소켓 객체가 현재 연결되어 있는지 여부를 나타냅니다. | Socket | ||
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
endian : String
데이터의 바이트 순서를 나타냅니다. | Socket | ||
isSupported : Boolean [정적] [읽기 전용]
현재 시스템에서 보안 소켓이 지원되는지 여부를 나타냅니다. | SecureSocket | ||
localAddress : String [읽기 전용]
로컬 컴퓨터에서 이 소켓이 바인딩된 IP 주소입니다. | Socket | ||
localPort : int [읽기 전용]
로컬 컴퓨터에서 이 소켓이 바인딩된 포트입니다. | Socket | ||
objectEncoding : uint
객체를 쓰거나 읽을 때 사용되는 AMF 버전을 제어합니다. | Socket | ||
remoteAddress : String [읽기 전용]
이 소켓을 연결할 원격 컴퓨터의 IP 주소입니다. | Socket | ||
remotePort : int [읽기 전용]
이 소켓을 연결할 원격 컴퓨터의 포트입니다. | Socket | ||
serverCertificate : X509Certificate [읽기 전용]
보안 SSL/TLS 연결이 설정된 후 서버에서 가져온 X.509 인증서를 보유합니다. | SecureSocket | ||
serverCertificateStatus : String [읽기 전용]
서버 인증서의 상태를 반환합니다. | SecureSocket | ||
timeout : uint
연결을 기다릴 시간(밀리초)를 나타냅니다. | Socket |
메서드 | 정의 주체 | ||
---|---|---|---|
새 SecureSocket 객체를 만듭니다. | SecureSocket | ||
서버 인증서의 유효성을 검사하기 위해 시스템에 사용되는 X.509 인증서를 로컬 인증서 체인에 추가합니다. | SecureSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
리스너에서 이벤트 알림을 받을 수 있도록 EventDispatcher 객체에 이벤트 리스너 객체를 등록합니다. | EventDispatcher | ||
소켓을 닫습니다. | Socket | ||
[재정의]
SSL 또는 TLS를 사용하여 지정된 호스트 및 포트에 소켓을 연결합니다. | SecureSocket | ||
이벤트를 이벤트 흐름으로 전달합니다. | EventDispatcher | ||
소켓의 출력 버퍼에 축적된 데이터를 모두 플러시합니다. | Socket | ||
EventDispatcher 객체에 특정 유형의 이벤트에 대한 리스너가 등록되어 있는지 여부를 확인합니다. | EventDispatcher | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
소켓에서 부울 값을 읽습니다. | Socket | ||
소켓에서 부호 있는 바이트를 읽습니다. | Socket | ||
소켓에서 length 매개 변수로 지정된 만큼의 데이터 바이트를 읽습니다. | Socket | ||
소켓에서 IEEE 754 배정밀도 부동 소수점 숫자를 읽습니다. | Socket | ||
소켓에서 IEEE 754 단정밀도 부동 소수점 숫자를 읽습니다. | Socket | ||
소켓에서 부호 있는 32비트 정수를 읽습니다. | Socket | ||
지정된 문자 세트를 사용하여 바이트 스트림에서 멀티바이트 문자열을 읽습니다. | Socket | ||
readObject():*
소켓에서 AMF 직렬 형식으로 인코딩된 객체를 읽습니다. | Socket | ||
소켓에서 부호 있는 16비트 정수를 읽습니다. | Socket | ||
소켓에서 부호 없는 바이트를 읽습니다. | Socket | ||
소켓에서 부호 없는 32비트 정수를 읽습니다. | Socket | ||
소켓에서 부호 없는 16비트 정수를 읽습니다. | Socket | ||
소켓에서 UTF-8 문자열을 읽습니다. | Socket | ||
소켓에서 length 매개 변수로 지정된 만큼의 UTF-8 데이터 바이트를 읽고 문자열을 반환합니다. | Socket | ||
EventDispatcher 객체에서 리스너를 제거합니다. | EventDispatcher | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object | ||
이 EventDispatcher 객체 또는 조상 객체에 지정한 이벤트 유형에 대한 이벤트 리스너가 등록되어 있는지 여부를 확인합니다. | EventDispatcher | ||
소켓에 부울 값을 씁니다. | Socket | ||
소켓에 바이트를 씁니다. | Socket | ||
지정된 바이트 배열로부터 바이트 시퀀스를 씁니다. | Socket | ||
소켓에 IEEE 754 배정밀도 부동 소수점 숫자를 씁니다. | Socket | ||
소켓에 IEEE 754 단정밀도 부동 소수점 숫자를 씁니다. | Socket | ||
소켓에 부호 있는 32비트 정수를 씁니다. | Socket | ||
지정된 문자 세트를 사용하여 바이트 스트림에서 멀티바이트 문자열을 씁니다. | Socket | ||
소켓에 AMF 직렬 형식으로 객체를 씁니다. | Socket | ||
소켓에 16비트 정수를 씁니다. | Socket | ||
소켓에 부호 없는 32비트 정수를 씁니다. | Socket | ||
소켓에 부호 없는 16비트 정수를 기록합니다. 이것은 지정된 UTF-8 문자열의 바이트 수와 문자열 자체의 길이를 의미합니다. | Socket | ||
소켓에 UTF-8 문자열을 씁니다. | Socket |
이벤트 | 요약 | 정의 주체 | ||
---|---|---|---|---|
[브로드캐스트 이벤트] Flash Player 또는 AIR 응용 프로그램이 운영 체제 포커스를 얻어 활성화될 때 전달됩니다. | EventDispatcher | |||
서버가 소켓 연결을 종료할 때 전달됩니다. | SecureSocket | |||
네트워크 연결이 설정되면 전달됩니다. | SecureSocket | |||
[브로드캐스트 이벤트] Flash Player 또는 AIR 응용 프로그램이 운영 체제 포커스를 잃고 비활성화될 때 전달됩니다. | EventDispatcher | |||
전송 또는 수신 작업의 실패를 유발하는 입력/출력 오류가 발생할 때 전달됩니다. | SecureSocket | |||
소켓이 해당 쓰기 버퍼에서 네트워킹 전송 레이어로 데이터를 이동할 때 전달됩니다. | Socket | |||
보안 제한으로 인해 SecureSocket.connect() 호출이 실패할 때 전달됩니다. | SecureSocket | |||
소켓이 데이터를 수신하면 전달됩니다. | SecureSocket |
isSupported | 속성 |
serverCertificate | 속성 |
serverCertificate:X509Certificate
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 3 |
보안 SSL/TLS 연결이 설정된 후 서버에서 가져온 X.509 인증서를 보유합니다. 보안 연결이 설정되지 않은 경우 이 속성은 null
로 설정됩니다. 현재 이 기능은 iOS에서 지원되지 않으며, 따라서 iOS의 경우 null
로 설정됩니다.
X.509 인증서에 대한 자세한 내용은 RFC2459를 참조하십시오.
구현
public function get serverCertificate():X509Certificate
serverCertificateStatus | 속성 |
serverCertificateStatus:String
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
서버 인증서의 상태를 반환합니다.
소켓이 서버 연결을 시도하기 전까지는 상태가 CertificateStatus.UNKNOWN
입니다. 유효성 검사가 끝나면 CertificateStatus 클래스에서 열거한 문자열 중 하나로 상태가 변경됩니다. 연결은 인증서가 유효하고 신뢰할 수 있는 경우에만 성공적으로 설정됩니다. 따라서 connect
이벤트 후의 serverCertificateStatus
값은 항상 trusted
가 됩니다.
참고: 유효성 검사를 통해 일단 인증서를 승인하거나 거부하고 나면 다음에 connect()
메서드를 호출할 때까지 상태 값은 업데이트되지 않습니다. close()
를 호출해도 상태 값이 "unknown"으로 재설정되지 않습니다.
구현
public function get serverCertificateStatus():String
관련 API 요소
SecureSocket | () | 생성자 |
public function SecureSocket()
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
새 SecureSocket 객체를 만듭니다.
SecureSocket 인스턴스를 만들려고 시도하기 전에 SecureSocket.isSupported
를 확인합니다. SSL 3.0 또는 TLS 1.0 소켓이 지원되지 않는 경우 런타임에서 IllegalOperationError를 발생시킵니다.
오류
IllegalOperationError — SSL 버전 3.0 이상 또는 TLS 버전 1.0 이상이 지원되지 않는 경우입니다.
| |
SecurityError — 신뢰할 수 없는 로컬 SWF 파일은 인터넷 통신이 불가능합니다. 이 SWF 파일을 네트워킹 가능한 로컬 파일(local-with-networking) 또는 신뢰할 수 있는 파일로 다시 규정하면 이 오류를 해결할 수 있습니다.
|
addBinaryChainBuildingCertificate | () | 메서드 |
public function addBinaryChainBuildingCertificate(certificate:ByteArray, trusted:Boolean):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 3 |
서버 인증서의 유효성을 검사하기 위해 시스템에 사용되는 X.509 인증서를 로컬 인증서 체인에 추가합니다. 인증서는 일시적이며 세션 기간 동안 지속됩니다.
서버 인증서 유효성 검사는 인증서 체인 작성 및 유효성 검사를 위해 시스템의 신뢰 저장소에 의존합니다. 이 메서드를 사용하여 추가 인증서 체인 및 신뢰할 수 있는 앵커를 프로그래밍 방식으로 추가합니다.
Mac OS에서 SSL/TLS 핸드셰이크 프로세스 도중 사용되는 기본 키체인은 시스템 키체인입니다. 인증 체인을 작성할 때 키체인이 포함되어 있는 모든 중간 인증서입니다.
이 API를 사용하여 추가한 인증서는 DER 인코딩 X.509 인증서여야 합니다. trusted
매개 변수가 true인 경우 이 API를 사용하여 추가한 인증서는 신뢰할 수 있는 앵커로 간주됩니다.
X.509 인증서에 대한 자세한 내용은 RFC2459를 참조하십시오.
매개 변수
certificate:ByteArray — DER 인코딩 X.509 디지털 인증서가 포함된 ByteArray 객체입니다.
| |
trusted:Boolean — 이 인증서를 신뢰 앵커로 지정하려면 true로 설정합니다.
|
오류
ArgumentError — 인증서를 추가할 수 없는 경우입니다.
|
connect | () | 메서드 |
override public function connect(host:String, port:int):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
SSL 또는 TLS를 사용하여 지정된 호스트 및 포트에 소켓을 연결합니다.
SecureSocket.connect()
메서드를 호출할 경우 소켓은 서버와의 SSL/TLS 핸드셰이킹을 시도합니다. 핸드셰이크가 성공한 경우 소켓은 서버 인증서의 유효성 검사를 시도합니다. 인증서가 유효하고 신뢰할 수 있는 경우 보안 소켓 연결이 설정되고 소켓이 connect
이벤트를 전달합니다. 핸드셰이크가 실패하거나 인증서 유효성을 확인할 수 없는 경우 소켓은 IOError
이벤트를 전달합니다. IOError
이벤트가 전달된 후 serverCertificateStatus
속성을 읽어 인증서 유효성 검사 결과를 확인할 수 있습니다. connect
이벤트가 전달되면 인증서 상태는 항상 trusted
입니다.
이미 소켓이 연결된 경우 기존 연결이 먼저 종료됩니다.
매개 변수
host:String — 연결할 호스트의 이름 또는 IP 주소입니다.
| |
port:int — 연결할 포트 번호입니다.
|
이벤트
connect: — 네트워크 연결이 설정되면 전달됩니다.
| |
ioError: — 호스트가 지정되고 연결 실패를 유발하는 입출력 오류가 발생하면 전달됩니다. 이 오류에는 SSL/TLS 핸드셰이크 오류 및 호스트의 서버 인증서 유효성 검사 실패 등이 포함됩니다.
| |
securityError: — Socket.connect() 에 대한 호출에서 소켓 정책 파일을 제공하지 않는 서버나 해당 정책 파일에서 호출하는 호스트에 지정된 포트에 대한 액세스를 허용하지 않는 서버에 연결을 시도하는 경우 전달됩니다. 정책 파일에 대한 자세한 내용은 ActionScript 3.0 개발자 가이드의 "웹 사이트 컨트롤(정책 파일)" 및 Flash Player 개발자 센터 항목: 보안을 참조하십시오.
|
오류
IOError — 호스트를 지정하지 않았으며 연결이 실패한 경우입니다.
| |
SecurityError — 0보다 작거나 65535보다 큰 소켓 포트를 지정한 경우입니다.
|
close | 이벤트 |
flash.events.Event
속성 Event.type =
flash.events.Event.CLOSE
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
서버가 소켓 연결을 종료할 때 전달됩니다.
close
이벤트는 서버가 연결을 종료할 때만 전달됩니다. Socket.close()
메서드를 호출할 때는 전달되지 않습니다.
Event.CLOSE
상수는 close
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
target | 연결이 종료된 객체입니다. |
connect | 이벤트 |
flash.events.Event
속성 Event.type =
flash.events.Event.CONNECT
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
네트워크 연결이 설정되면 전달됩니다.
Event.CONNECT
상수는 connect
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
target | 네트워크 연결을 설정한 Socket 또는 XMLSocket 객체입니다. |
ioError | 이벤트 |
flash.events.IOErrorEvent
속성 IOErrorEvent.type =
flash.events.IOErrorEvent.IO_ERROR
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
전송 또는 수신 작업의 실패를 유발하는 입력/출력 오류가 발생할 때 전달됩니다.
서버 인증서의 유효성을 검사할 수 없는 경우 IOError가 오류 이벤트로 전달됩니다. 이 경우 serverCertificateStatus
속성을 검사하여 문제의 원인을 확인할 수 있습니다.
ioError
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
errorID | 특정 오류와 연결된 참조 번호입니다(AIR만 해당). |
target | 입력/출력 오류가 발생한 네트워크 객체입니다. |
text | 오류 메시지로 표시될 텍스트입니다. |
securityError | 이벤트 |
flash.events.SecurityErrorEvent
속성 SecurityErrorEvent.type =
flash.events.SecurityErrorEvent.SECURITY_ERROR
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
보안 제한으로 인해 SecureSocket.connect()
호출이 실패할 때 전달됩니다.
응용 프로그램 보안 샌드박스 외부의 Flash Player 또는 AIR에서 실행되는 코드가 다른 도메인의 서버나 1024 미만의 포트에 연결을 시도하고 서버에서 연결을 허용하는 정책 파일을 제공하지 않을 경우 보안 오류 이벤트가 전달됩니다. AIR 응용 프로그램 샌드박스 내에서 실행되는 코드는 정책 파일 없이 모든 도메인의 서버 및 1024 미만의 포트에 연결할 수 있습니다.
SecurityErrorEvent.SECURITY_ERROR
상수는 securityError
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
target | 보안 오류를 보고하는 네트워크 객체입니다. |
text | 오류 메시지로 표시될 텍스트입니다. |
관련 API 요소
socketData | 이벤트 |
flash.events.ProgressEvent
속성 ProgressEvent.type =
flash.events.ProgressEvent.SOCKET_DATA
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 2 |
소켓이 데이터를 수신하면 전달됩니다. socketData
유형의 이벤트는 ProgressEvent.bytesTotal
속성을 사용하지 않습니다.
socketData
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 현재 이벤트를 처리하고 있는 객체입니다. |
bytesLoaded | 리스너가 이벤트를 처리할 때 로드된 항목 수 또는 바이트 수입니다. |
bytesTotal | 0: 이 속성은 socketData 이벤트 객체에서 사용되지 않습니다. |
target | 진행률을 보고하는 소켓입니다. |
package { import flash.display.Sprite; import flash.errors.IOError; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.SecureSocket; public class SecureSocketExample extends Sprite { private var secureSocket:SecureSocket = new SecureSocket(); public function SecureSocketExample() { secureSocket.addEventListener( Event.CONNECT, onConnect ) secureSocket.addEventListener( IOErrorEvent.IO_ERROR, onError ); try { secureSocket.connect( "208.77.188.166", 443 ); } catch ( error:Error ) { trace ( error.toString() ); } } private function onConnect( event:Event ):void { trace("Connected."); } private function onError( error:IOErrorEvent ):void { trace( error.text + ", " + secureSocket.serverCertificateStatus ); } } }
Tue Jun 12 2018, 03:17 PM Z