모듈 SSL
ssl 모듈은 네트워크 연결을 위한 SSL 하이퍼텍스트 전송 프로토콜을 설정하는 데 사용할 수 있는 fibjs의 내장 암호화 모듈입니다. 이 모듈은 클라이언트와 서버가 연결이 안전한지 확인할 수 있도록 암호화 인증을 제공합니다.
ssl 모듈에는 완전한 SSL 클라이언트/서버 통신 프로세스에 사용할 수 있는 여러 개체와 상수가 포함되어 있습니다. 일반적으로 사용되는 카테고리는 다음과 같습니다.
- SslSocket: 기초를 바탕으로Socket캡슐화된 SSL 소켓 개체는 원격 서버와의 양방향 인증과 같은 통신 작업에 사용할 수 있습니다.
- SslHandler: 데이터 스트림을 서버 측 서비스 구축에 적합한 SSL 스트림 프로토콜로 변환하는 데 사용되는 SSL 프로토콜 변환 프로세서.
- SslServer: 표준 다중 파이버 SSL 서버 구축에 편리한 SSL 서버 객체.
이하ssl.Server예를 들어 ssl 모듈의 사용을 소개합니다.
ssl.ServerSSL 기반의 웹 서비스를 제공하는 기본 SSL 서버입니다. 사용ssl.Server클래스는 SSL/TLS 기반 서버를 빠르게 생성할 수 있으며 TCP/HTTP 서비스의 모든 기본 기능과 호환됩니다. 다음과 같은 특징이 있습니다.
- X.509 인증서 관리자와 함께 제공되며 여러 도메인 이름 인증서, 와일드카드, SAN 인증서 및 기타 기능을 지원합니다.
- TCP 서버와 동일한 인터페이스와 사용법을 가지고 있으며 상위 계층 코드는 SSL 연결과 TCP 연결의 차이를 신경 쓸 필요가 없습니다.
- 모든 SSL/TLS 보안 프로토콜은 내장된 OpenSSL 라이브러리를 사용하여 구현됩니다.
- SNI 및 ALPN과 같은 프로토콜 확장 기능을 지원합니다.
다음은 간단한 예입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19const ssl = require('ssl');
const http = require('http');
const crypto = require('crypto');
// read cert and key
let key = crypto.loadPKey('mycert.key');
let cert = crypto.loadCert('mycert.pem');
// create ssl server
const svr = new ssl.Server(cert, key, 8080, s => {
var data;
while (data = s.read()) {
console.log(`received data: ${data.toString()}`);
s.write(data.toString().toUpperCase());
}
});
// start server
svr.start();
위의 코드에서 먼저 SSL 인증서와 개인 키 파일을 읽은 다음 SSL 서버 인스턴스를 만듭니다. 서버의 콜백 기능에서는 클라이언트로부터 데이터를 받은 후 데이터를 대문자로 변환하고 쓰기 기능을 통해 클라이언트에게 데이터를 반환한다.
물체
Socket
1SslSocket ssl.Socket;
Handler
만들다SslHandler객체, 참조SslHandler
1SslHandler ssl.Handler;
Server
1SslServer ssl.Server;
정적 함수
connect
만들다SslSocket개체 및 연결
1
2static Stream ssl.connect(String url,
Integer timeout = 0) async;
호출 매개변수:
- url: 문자열, 다음과 같은 연결 프로토콜을 지정합니다. ssl://host:port
- timeout: 정수, 타임아웃 시간을 밀리초 단위로 지정, 기본값은 0
반환 결과:
만들다SslSocket개체 및 연결
1
2
3
4static Stream ssl.connect(String url,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
호출 매개변수:
- url: 문자열, 다음과 같은 연결 프로토콜을 지정합니다. ssl://host:port
- crt:X509Cert, 클라이언트를 인증하기 위해 서버에 보내는 데 사용되는 인증서
- key:PKey, 클라이언트와 대화하는 데 사용되는 개인 키
- timeout: 정수, 타임아웃 시간을 밀리초 단위로 지정, 기본값은 0
반환 결과:
만들다SslSocket개체 및 연결
1
2
3
4
5static Stream ssl.connect(String url,
Integer verification,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
호출 매개변수:
- url: 문자열, 다음과 같은 연결 프로토콜을 지정합니다. ssl://host:port
- verification: 정수, 인증서 검증 모드
- crt:X509Cert, 클라이언트를 인증하기 위해 서버에 보내는 데 사용되는 인증서
- key:PKey, 클라이언트와 대화하는 데 사용되는 개인 키
- timeout: 정수, 타임아웃 시간을 밀리초 단위로 지정, 기본값은 0
반환 결과:
setClientCert
기본 클라이언트 인증서 설정
1
2static ssl.setClientCert(X509Cert crt,
PKey key);
호출 매개변수:
loadRootCerts
함께 제공되는 기본 루트 인증서를 로드합니다.ssl.ca.loadRootCerts
1static ssl.loadRootCerts();
이 인증서 내용은 http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt 에서 가져온 것입니다.
정적 속성
ca
X509Cert, 서버 인증서를 확인하기 위한 SSL 클라이언트 모드용 글로벌 인증서
1static readonly X509Cert ssl.ca;
verification
정수, 인증서 확인 모드 설정, 기본값은 VERIFY_REQUIRED입니다.
1static Integer ssl.verification;
끊임없는
VERIFY_NONE
인증서 확인 모드, 확인 없음
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
인증서 확인 모드, 선택적 확인, 확인 실패 허용
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
인증서 확인 모드, 확인이 필요하며 확인에 실패하면 중단됩니다.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
인증서 확인 결과, 인증서 시간 초과
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
인증서 확인 결과 인증서가 취소됩니다.
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
인증서 확인 결과 인증서 이름이 잘못되었습니다.
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
인증서 확인 결과 인증서를 신뢰할 수 없습니다.
1const ssl.BADCERT_NOT_TRUSTED = 8;