MTLS 사용
MTLS 사용
서버가 인증서로 인증되는 것이 일반적이지만 이 경우 클라이언트도 인증서를 가지고 있습니다. MTLS를 사용하면 서버는 클라이언트가 누구인지 확인할 수 있습니다.
MTLS means "mutual TLS authentication" or "two-way TLS authentication".
시나리오는 클라이언트(Amy)가 MTLS를 사용하여 서버(Bob)에 액세스하는 것입니다.
아래 다이어그램은 서버 및 클라이언트 인증서가 생성되는 방법을 보여줍니다.
CA(인증 기관)는 신뢰할 수 있는 루트 인증서로 인증서 서명을 담당하는 제3자입니다. 그러나 두 당사자(Amy 또는 Bob) 중 하나에 속한 CA를 사용하는 것이 일반적입니다.
Amy가 하나의 CA를 사용하고 Bob이 다른 CA를 선택할 수도 있습니다(나중에 설명함).
서버 인증서를 만드는 절차는 클라이언트 인증서와 동일합니다. 유일한 차이점은 인증서 제목에 사용되는 일반 이름입니다.
MTLS means "mutual TLS authentication" or "two-way TLS authentication".
1. [CA] 자체 서명된 루트 CA X.509 인증서 생성
openssl req \
-new \
-x509 \
-nodes \
-days 365 \
-subj '/CN=my-ca' \
-keyout ca.key \
-out ca.crt
2. [Bob, server side] 서버 키 생성
openssl genrsa -out bob_server.key 2048
3. [Bob, server side] 서버의 인증서 요청
제목의 일반 이름은
srv.bob.com
와 같이 클라이언트에서 사용할 서버 이름을 반영해야 합니다. 을 위한테스트 목적으로 간단하게 가정합니다
localhost
.openssl req \
-new \
-key bob_server.key \
-subj '/CN=localhost' \
-out bob_server.csr
생성을 진행하려면 이 단계에서 생성된 인증서 서명 요청(csr 파일)을 CA로 보내야 합니다.
인증서.
4. [CA, Bob 대신] CSR을 사용하여 CA는 서명된 서버 인증서를 생성합니다.
openssl x509 \
-req \
-in bob_server.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-days 365 \
-out bob_server.crt
인증서(crt 파일)가 Bob에게 전송됩니다.
5. [Amy, client side] 클라이언트 키 생성
openssl genrsa -out amy_client.key 2048
6. [Amy, client side] 서버 인증서 요청
openssl req \
-new \
-key amy_client.key \
-subj '/CN=amy-client' \
-out amy_client.csr
생성을 진행하려면 이 단계에서 생성된 인증서 서명 요청(csr 파일)을 CA로 보내야 합니다.
인증서.
7. [Amy 대신 CA] CSR을 사용하여 CA는 서명된 클라이언트 인증서를 생성합니다.
openssl x509 \
-req \
-in amy_client.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-days 365 \
-out amy_client.crt
인증서(crt 파일)가 Amy에게 전송됩니다.
테스트
Bob의 서버를 시작합니다.
노드 애플리케이션 시작:
node app_bob.js
보다 안전한 TLS v1.3을 사용하는 클라이언트만 허용하려는 경우:
node --tls-min-v1.3 app_bob.js
Amy의 클라이언트 실행:
curl \
--cacert ca.crt \
--key amy_client.key \
--cert amy_client.crt \
https://localhost:3000
고유한 CA 사용
Amy와 Bob이 서로 다른 CA를 사용하는 경우 서로의 루트 인증서를 알아야 합니다.
Amy와 Bob의 CA에 각각 인증서amy_ca.crt
와 bob_ca.crt
가 있다고 가정합니다.
따라서 Bob은 Amy가 사용하는 인증서를 로드해야 합니다.
const options = {
ca: fs.readFileSync('amy_ca.crt'),
그리고 Amy의 클라이언트는 Bob이 사용하는 인증서를 알아야 합니다.
curl \
--cacert bob_ca.crt \
다음은 이 시나리오를 만들기 위한 전체 지침입니다.
밥(서버측):
openssl req \
-new \
-x509 \
-nodes \
-days 365 \
-subj '/CN=bob-ca' \
-keyout bob_ca.key \
-out bob_ca.crt
openssl genrsa -out bob_server.key 2048
openssl req \
-new \
-key bob_server.key \
-subj '/CN=localhost' \
-out bob_server.csr
openssl x509 \
-req \
-in bob_server.csr \
-CA bob_ca.crt \
-CAkey bob_ca.key \
-CAcreateserial \
-days 365 \
-out bob_server.crt
Amy(클라이언트 측):
openssl req \
-new \
-x509 \
-nodes \
-days 365 \
-subj '/CN=amy-ca' \
-keyout amy_ca.key \
-out amy_ca.crt
openssl genrsa -out amy_client.key 2048
openssl req \
-new \
-key amy_client.key \
-subj '/CN=amy-client' \
-out amy_client.csr
openssl x509 \
-req \
-in amy_client.csr \
-CA amy_ca.crt \
-CAkey amy_ca.key \
-CAcreateserial \
-days 365 \
-out amy_client.crt
참조
https://github.com/adzubla/mtls-test
Reference
이 문제에 관하여(MTLS 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/adzubla/using-mtls-5711
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
node app_bob.js
node --tls-min-v1.3 app_bob.js
curl \
--cacert ca.crt \
--key amy_client.key \
--cert amy_client.crt \
https://localhost:3000
Amy와 Bob이 서로 다른 CA를 사용하는 경우 서로의 루트 인증서를 알아야 합니다.
Amy와 Bob의 CA에 각각 인증서
amy_ca.crt
와 bob_ca.crt
가 있다고 가정합니다.따라서 Bob은 Amy가 사용하는 인증서를 로드해야 합니다.
const options = {
ca: fs.readFileSync('amy_ca.crt'),
그리고 Amy의 클라이언트는 Bob이 사용하는 인증서를 알아야 합니다.
curl \
--cacert bob_ca.crt \
다음은 이 시나리오를 만들기 위한 전체 지침입니다.
밥(서버측):
openssl req \
-new \
-x509 \
-nodes \
-days 365 \
-subj '/CN=bob-ca' \
-keyout bob_ca.key \
-out bob_ca.crt
openssl genrsa -out bob_server.key 2048
openssl req \
-new \
-key bob_server.key \
-subj '/CN=localhost' \
-out bob_server.csr
openssl x509 \
-req \
-in bob_server.csr \
-CA bob_ca.crt \
-CAkey bob_ca.key \
-CAcreateserial \
-days 365 \
-out bob_server.crt
Amy(클라이언트 측):
openssl req \
-new \
-x509 \
-nodes \
-days 365 \
-subj '/CN=amy-ca' \
-keyout amy_ca.key \
-out amy_ca.crt
openssl genrsa -out amy_client.key 2048
openssl req \
-new \
-key amy_client.key \
-subj '/CN=amy-client' \
-out amy_client.csr
openssl x509 \
-req \
-in amy_client.csr \
-CA amy_ca.crt \
-CAkey amy_ca.key \
-CAcreateserial \
-days 365 \
-out amy_client.crt
참조
https://github.com/adzubla/mtls-test
Reference
이 문제에 관하여(MTLS 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/adzubla/using-mtls-5711
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(MTLS 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/adzubla/using-mtls-5711텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)