가이드 개발 가이드

fibjs에서 X509 인증서 사용

배경 소개

x509 인증서란 무엇입니까?

x509 인증서는 국제 표준을 기반으로 하는 공개키 인증 서비스(PKI) 시스템에서 가장 일반적으로 사용되는 디지털 인증서 형식입니다. 이는 인증 및 암호화에 사용될 수 있으며 SSL/TLS 프로토콜 및 인터넷의 기타 유형의 네트워크 애플리케이션에 널리 사용됩니다. x509 인증서는 공개 키/개인 키 인증 메커니즘을 사용하며 데이터 전송의 기밀성, 무결성 및 신뢰성을 보장할 수 있습니다.

x509 인증서는 어떤 시나리오에서 사용됩니까?

인터넷에서 x509 인증서에 가장 일반적으로 사용되는 시나리오는 TLS/SSL 프로토콜의 인증서 인증을 통해 클라이언트와 서버 간에 전송되는 데이터가 보안 채널을 사용하여 암호화되고 확인되는지 확인하는 것입니다. x509 인증서는 VPN/SSH와 같은 공개 및 개인 키 암호화를 기반으로 하는 애플리케이션 프로토콜의 ID 인증에도 사용할 수 있습니다.

fibjs는 x509 인증서 처리를 지원합니다.

fibjs는 x509 인증서 처리를 지원하고 암호화 모듈에서 X509Cert 및 X509Req와 같은 클래스를 제공하여 인증서 읽기, 생성 및 서명과 같은 작업을 수행합니다. 이러한 클래스를 사용하여 인증서의 유효 기간, 공개 키, 발급자, 주체 이름 및 기타 정보를 얻을 수 있을 뿐만 아니라 인증서 서명 및 확인과 같은 작업을 수행할 수 있습니다. 동시에 fibjs는 HTTPS 인증서 인증 및 암호화된 연결을 지원하는 HttpsServer 클래스도 제공하므로 fibjs에서 x509 인증서를 더 쉽게 사용할 수 있습니다.

X509 모듈 소개

X509 모듈이란 무엇입니까?

fibjs의 암호화 모듈에서는 x509 인증서 읽기, 생성 및 서명과 같은 작업을 수행하기 위해 X509Cert 및 X509Req와 같은 클래스가 제공됩니다. X509 모듈은 x509 인증서를 처리하기 위한 모듈로 인증서 구문 분석, 생성 및 확인과 같은 작업을 제공합니다.

X509 모듈의 기능

X509 모듈의 기능은 x509 인증서를 작동하는 것입니다. 이 모듈을 사용하여 기존 x509 인증서를 읽고 인증서의 유효 기간, 공개 키, 발급자, 주체 이름 및 기타 정보를 얻을 수 있습니다. 동시에 X509 모듈은 TLS/SSL 프로토콜의 인증서 인증과 같은 x509 인증서 요청 및 서명 인증서를 생성할 수도 있습니다.

X509 모듈 API

다음은 X509 모듈의 더 중요한 API 목록입니다.

  • X509Cert: x509 인증서를 읽고 조작하기 위한 클래스입니다.
  • X509Req: x509 인증서 요청을 생성하는 데 사용되는 클래스입니다.
  • verify: CA 인증서 쌍을 통해 x509 인증서를 확인합니다.
  • SslServer: x509 인증서를 기반으로 인증 서비스를 제공하는 클래스입니다.
  • SslSocket: x509 인증서 기반 인증 서비스를 위한 소켓 데이터 송수신 작업을 제공하는 클래스입니다.

샘플 코드

다음은 x509 인증서를 읽고 x509 인증서 요청을 생성하는 샘플 코드입니다.

1 2 3 4 5 6 7 8 9 10 11 12
const crypto = require('crypto'); // load the cert const cert = crypto.loadCert('server.crt'); console.log(cert.subject); // create x509 certificate request let pky = crypto.PKey.from(private_pem); let req = new crypto.X509Req("CN=localhost,O=fibjs", pky); let derReq = req.der(); let pemReq = req.pem(); console.log(pemReq);

위의 샘플 코드는 X509Cert 클래스를 통해 기존 x509 인증서를 읽고 인증서의 주체 이름을 출력합니다. 동시에 샘플 코드는 X509Req를 통해 x509 인증서 요청을 생성하고 요청 정보를 PEM 형식으로 출력하는 방법도 보여줍니다.

X509 모듈의 사용

자체 서명된 인증서 생성

자체 서명된 인증서를 생성하는 프로세스는 비교적 간단하며 일반적으로 다음 단계를 완료해야 합니다.

  • PKey(개인 키) 생성
  • X509Req 생성(인증서 요청)
  • X509Req를 사용하여 X509Cert(공식 인증서) 생성
  • 인증서 저장

이러한 단계를 사용하면 테스트 및 개발 환경에서 사용할 고유한 x509 인증서를 생성할 수 있습니다. 구체적인 구현은 다음과 같습니다.

다음 코드를 사용하여 PKey 개체를 만듭니다. 그 중 from() 메소드는 PEM 포맷 스트링이나 Buffer를 통해 PKey 객체를 생성할 수 있다.

1 2
const crypto = require('crypto'); const pky = crypto.PKey.from(private_pem);

다음 코드를 사용하여 X509Req 개체를 만듭니다. 그 중 X509Req의 첫 번째 매개변수는 주체 고유명(Subject Name)이고, 문자열 형식은 key1=value1,key2=value2이다. 두 번째 매개변수는 이전에 생성되어 인증서 서명에 사용되는 PKey 개체입니다. 예를 들어:

1
let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);

다음 코드를 사용하여 X509Cert(공식 인증서)를 생성합니다. 구체적인 작업은 X509Req의 sign() 메서드를 호출하는 것입니다. 이 메서드는 인증 기관 이름, 서명에 사용되는 PKey 개체 및 기타 관련 정보라는 세 가지 매개 변수를 허용합니다. 예를 들어 다음 예에서 X509Req 개체는 자체 서명된 인증서로 서명되고 서명 기관은 자체이며 인증서는 10년 동안 유효합니다.

1 2 3 4 5
const opt = { notBefore: new Date(), notAfter: new Date(new Date().getTime() + 10 * 365 * 24 * 60 * 60 * 1000) }; const cert = xrq.sign("CN=localhost,O=fibjs", pky, opt);

다음 코드를 사용하여 PKey 및 X509Cert를 로컬 파일에 저장합니다. 인증서는 PEM 형식으로 저장되므로 pem() 메서드를 사용하여 인증서 객체를 문자열로 변환한 다음 파일에 직접 저장할 수 있습니다.

1 2 3 4 5
const fs = require('fs'); const ks = pky.pem(); // export pem format data of the private key const cs = cert.pem(); // export pem format data of the cert fs.writeFile('mycert.key', ks); // save the key fs.writeFile('mycert.pem', cs); // save the cert

위 코드는 개인 키 생성부터 자체 서명 인증서 저장까지 전체 과정을 완료합니다. 이 인증서를 사용하여 보안 관련 애플리케이션을 테스트하고 개발할 수 있습니다.

인증서 로드

인증서를 로드하는 것은 x509 인증서를 사용할 때 중요한 작업입니다. 다음은 인증서 파일을 로드하는 방법과 공개 키 및 개인 키를 로드하는 방법에 대해 설명합니다.

x509 인증서를 사용하려면 먼저 인증서 파일을 메모리로 읽어온 후 x509 인증서 개체로 변환해야 합니다. 인증서 파일을 로드하는 방법은 다음과 같습니다.

fibjs JavaScript 프로그램에서는 fs 모듈의 관련 API를 사용하여 파일을 읽을 수 있습니다. 예를 들어 PEM 형식의 인증서 파일을 읽으려면 다음 코드를 사용합니다.

1 2
const fs = require('fs'); const certData = fs.readFile('server.crt');

파일을 읽은 후 X509Cert 개체를 사용하여 인증서 파일 내용을 x509 인증서로 변환해야 합니다.

1 2
const crypto = require('crypto'); const cert = new crypto.X509Cert(certData);

위 단계 후에 로컬 x509 인증서 파일을 로드할 수 있습니다. crypto.loadCert를 사용하여 인증서를 직접 읽을 수도 있습니다.

1 2
const crypto = require('crypto'); const cert = crypto.loadCert('server.crt');

x509 인증서에는 공개키와 암호화된 서명 정보가 저장되어 있으므로, 인증서 사용 시 데이터 암호화 및 복호화를 용이하게 하기 위해 인증서에 포함된 공개키를 파싱해야 합니다. PKey 클래스는 PEM 형식의 공개/개인 키 문자열을 공개/개인 키 개체로 변환할 수 있습니다. 다음 코드를 사용하여 PEM 형식의 공개/개인 키 문자열을 읽고 PKey 객체를 생성할 수 있습니다.

1 2
const privateKey = fs.readFile('private.pem'); // load the data from file const pKey = crypto.PKey.from(privateKey); // load from pem format data

또는 crypto.loadPKey를 사용하여 직접 읽으십시오.

1 2
const crypto = require('crypto'); const pKey = crypto.loadPKey('private.pem');

위 단계를 수행한 후 공개/개인 키 파일을 PKey 개체로 변환할 수 있습니다.

인증서 분석

인증서는 데이터 전송의 인증 및 암호화에 사용되는 SSL/TLS 상호 작용의 중요한 구성 요소입니다. 이제 fibjs에서 인증서를 파싱하는 방법을 알아 보겠습니다.

암호화 모듈의 X509Cert 클래스를 사용하여 DER/PEM 형식의 인증서 파일을 읽어 인증서 개체를 구성한 다음 인증서 주체 이름, 발급자 이름, 유효 기간 등 인증서에 대한 몇 가지 기본 정보를 얻을 수 있습니다. 등. .

샘플 코드는 다음과 같습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
const crypto = require('crypto'); const cert = crypto.loadCert('path/to/cert.pem'); const subjectName = cert.subject; const issuerName = cert.issuer; const validFromDate = cert.notBefore; const expirationDate = cert.notAfter; const serialNumber = cert.serial; console.log(`证书主题名称: ${subjectName}`); console.log(`证书颁发者名称: ${issuerName}`); console.log(`证书有效期: ${validFromDate.toLocaleString()} ~ ${expirationDate.toLocaleString()}`); console.log(`证书序列号: ${serialNumber}`);

인증서를 사용해야 할 때에는 인증서의 적법성을 검증해야 하는데, 가장 중요한 것은 인증서가 신뢰할 수 있는 기관에서 발급된 것인지 확인하는 것입니다. X509Cert의 확인 방법을 사용하여 인증서의 유효성을 확인할 수 있습니다. 일반적인 확인 방법은 인증서가 신뢰할 수 있는 CA에서 발급되었는지 확인하기 위해 인증서 체인을 확인하는 것입니다.

샘플 코드는 다음과 같습니다.

1 2 3 4 5 6 7 8 9
const caCert = crypto.loadCert('path/to/ca.crt'); const verifyResult = cert.verify(caCert); if (verifyResult !== 0) { console.error('证书验证失败', verifyResult); } else { console.log('证书验证通过'); }

이 샘플 코드에서는 먼저 지정된 CA 인증서를 읽고 X509Cert 개체를 생성한 다음 인증서 개체의 verify 메서드를 사용하여 확인해야 하는 인증서를 확인하고 확인 결과를 얻습니다. 검증 결과가 0인지 비교하여 인증서의 적법성 여부를 판단할 수 있습니다. 검증 결과가 0이 아닌 경우 검증에 실패한 것이므로 인증서 사용을 중지해야 합니다.

인증서 사용

https 서버를 사용하는 경우 사용된 인증서가 서버에 추가되었는지 확인해야 합니다. 다음은 crypto 모듈을 통해 인증서와 개인 키 파일을 로드하는 간단한 예입니다.

1 2 3 4 5 6 7 8 9 10
const http = require("http"); const crypto = require("crypto"); const cert = crypto.loadCert("server.crt"); const key = crypto.loadPKey("server.key"); const server = new http.HttpsServer(cert, key, 8443, function(req) { req.response.write(`Hello, fibjs!`); }); server.start();

위의 예에서는 loadCert 및 loadPKey 함수를 통해 server.crt 및 server.key 파일을 로드한 다음 HttpsServer 개체를 사용하여 서비스를 생성하고 로드된 인증서 및 키 파일을 사용하여 서비스를 시작했습니다.

X509 모듈에 대한 참고 사항

인증서 보안

X509 모듈은 인증서 생성, 처리 등의 기능을 제공하며 인증서의 보안이 보장되어야 하므로 다음 사항에 특별한 주의가 필요합니다.

  • 개인 키의 보안. 개인 키는 인증서의 중요한 부분이므로 엄격하게 보호되어야 합니다. 인증서를 사용하는 동안에는 개인키를 최대한 안전한 곳에 보관하고, 접근 권한을 적절하게 설정해야 합니다.
  • 인증서 전송은 안전합니다. 인증서를 교환하고 사용하는 동안 인증서가 도난당하거나 변조되는 것을 방지하기 위해 안전한 전송 방법을 사용해야 합니다.
  • 인증서 확인은 안전합니다. 인증서 검증은 인증서의 유효성과 보안을 보장하는 중요한 단계로, 위조된 인증서로 인해 사용자가 오해하는 일이 없도록 인증서 검증 규칙을 엄격히 준수하여 검증을 수행해야 합니다.

인증서 유효기간

인증서의 유효기간은 인증서 발급일로부터 인증서 만료일까지의 기간을 의미합니다. 인증서의 유효기간은 인증서의 사용시간을 제한하며, 인증서가 만료되기 전에는 인증서 보유자가 인증서를 사용할 수 있으나, 인증서가 만료된 후에는 인증서의 유효성이 상실됩니다.

따라서 인증서를 사용하기 전에 인증서의 유효기간을 확인하여 만료된 인증서를 사용하지 않도록 하세요. 동시에 인증서의 가용성을 보장하려면 만료되기 전에 가능한 한 빨리 인증서를 업데이트해야 합니다.

인증서 신뢰 메커니즘

인증서의 신뢰 메커니즘은 클라이언트나 서버가 인증서를 신뢰할 수 있는지 여부를 결정하는 핵심 요소입니다. 일반적으로 클라이언트나 서버는 신뢰할 수 있는 기관(CA)이 서명하고 인식한 인증서만 신뢰합니다.

인증서를 사용하기 전에 인증서의 신뢰 문제를 확인해야 합니다. 인증서의 발급기관, 인증서의 주체 식별명 등을 확인하여 인증서의 신뢰성 여부를 판단할 수 있습니다.

인증서 갱신 메커니즘

인증서 갱신 메커니즘은 인증서가 유효하고 안전하게 유지되도록 하는 중요한 부분입니다. 일반적으로 인증서 갱신에는 주로 다음 두 가지 측면이 포함됩니다.

  • 인증서 만료 후 갱신. 인증서가 만료된 후에는 인증서를 다시 신청하고 해당 규칙에 따라 서명하고 확인하여 인증서의 유효성을 확인해야 합니다.
  • 인증서 연장 및 갱신. 인증서 사용 중 인증서 정보를 확장하거나 업데이트해야 하는 경우 인증서를 다시 신청하고 서명 및 확인하면 됩니다.

요약하자면 X509 모듈은 인증서 생성, 처리 및 기타 기능을 제공하며 인증서의 보안, 신뢰성 및 유효성을 보장하는 중요한 링크입니다. 인증서를 사용하고 관리하는 과정에서 인증서의 유효성과 보안을 보장하기 위해 해당 규칙과 요구 사항을 따라야 합니다.

👉【네이티브 모듈 추가