웹사이트 검색

Debian 11에서 인증 기관(CA)을 설정하고 구성하는 방법


소개

CA(Certificate Authority)는 인터넷에서 신원을 확인하기 위해 디지털 인증서를 발행하는 일을 담당하는 기관입니다. 공개 CA는 일반 대중에게 제공되는 웹 사이트 및 기타 서비스의 ID를 확인하는 데 널리 사용되는 선택이지만 일반적으로 비공개 CA는 폐쇄된 그룹 및 비공개 서비스에 사용됩니다.

개인 인증 기관을 구축하면 클라이언트와 서버 간의 암호화된 연결이 필요한 프로그램을 구성, 테스트 및 실행할 수 있습니다. 사설 CA를 사용하면 인프라 내의 사용자, 서버 또는 개별 프로그램 및 서비스에 대한 인증서를 발급할 수 있습니다.

자체 사설 CA를 사용하는 Linux 프로그램의 몇 가지 예는 Puppet 입니다. 또한 개발 및 스테이징 환경이 TLS를 사용하여 연결을 암호화하는 프로덕션 서버와 일치하도록 하기 위해 사설 CA에서 발급한 인증서를 사용하도록 웹 서버를 구성할 수도 있습니다.

이 가이드에서는 Debian 11 서버에 개인 인증 기관을 설정하고 새 CA를 사용하여 테스트 인증서를 생성하고 서명합니다. 또한 CA와 원격 서버 또는 사용자 간의 신뢰 체인을 확인할 수 있도록 CA 서버의 공용 인증서를 운영 체제의 인증서 저장소로 가져옵니다. 마지막으로 인증서를 해지하고 CRL(인증서 해지 목록)을 배포하여 인증된 사용자와 시스템만 CA에 의존하는 서비스를 사용할 수 있도록 합니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • Debian 11 서버가 전용 CA 서버가 됩니다. 인증서 요청을 가져오고 서명하고 취소하는 데만 사용됩니다. 공용 서비스를 호스팅하는 기존 서버를 사용하지 마십시오. 이상적으로는 CA 서버를 사용하지 않을 때 종료하거나 오프라인 상태로 두어 개인 키가 손상에 취약하지 않도록 해야 합니다.
  • sudo 권한이 있는 루트가 아닌 사용자. 이를 설정하려면 Debian 11 초기 서버 설정 가이드를 따르십시오. 링크된 튜토리얼은 또한 방화벽을 설정하며, 이 가이드 전체에서 방화벽이 있다고 가정합니다.

참고: 인증서 서명 및 취소에 대해 배우려는 경우 이 자습서의 마지막 섹션은 선택 사항입니다. 이러한 연습 단계를 완료하기로 선택한 경우 두 번째 Debian 11 서버가 필요하거나 Debian 또는 Ubuntu를 실행하는 로컬 Linux 컴퓨터 또는 이들 중 하나에서 파생된 배포를 사용할 수도 있습니다.

1단계 - Easy-RSA 설치

이 자습서의 첫 번째 작업은 CA 서버에 easy-rsa 유틸리티를 설치하는 것입니다. Easy-RSA는 개인 키와 공개 루트 인증서를 생성하는 데 사용할 인증 기관 관리 도구입니다. 그런 다음 이를 사용하여 CA에 의존할 클라이언트와 서버의 요청에 서명합니다.

초기 설정 단계에서 생성한 루트가 아닌 sudo 사용자로 CA 서버에 로그인하고 다음을 실행합니다.

  1. sudo apt update
  2. sudo apt install easy-rsa

패키지를 다운로드하고 설치하라는 메시지가 표시됩니다. y를 눌러 패키지 설치를 확인하십시오.

이제 설정에 필요한 모든 것이 있고 Easy-RSA를 사용할 준비가 되었습니다. 다음 단계에서는 공개 키 인프라를 만든 다음 인증 기관 구축을 시작합니다.

2단계 - 공개 키 인프라 디렉토리 준비

이제 easy-rsa를 설치했으므로 CA 서버에 PKI(Public Key Infrastructure)의 뼈대를 만들 차례입니다. 여전히 루트가 아닌 사용자로 로그인되어 있는지 확인하고 easy-rsa 디렉토리를 생성합니다. 일반 사용자는 승격된 권한 없이 CA를 관리하고 상호 작용해야 하므로 sudo를 사용하여 다음 명령을 실행하지 않도록 하십시오.

  1. mkdir ~/easy-rsa

이렇게 하면 홈 폴더에 easy-rsa라는 새 디렉토리가 생성됩니다. 이 디렉토리를 사용하여 이전 단계에서 설치한 easy-rsa 패키지 파일을 가리키는 심볼릭 링크를 생성합니다. 이러한 파일은 CA 서버의 /usr/share/easy-rsa 폴더에 있습니다.

ln 명령을 사용하여 심볼릭 링크를 만듭니다.

  1. ln -s /usr/share/easy-rsa/* ~/easy-rsa/

참고: 다른 가이드에서는 easy-rsa 패키지 파일을 PKI 디렉터리에 복사하도록 지시할 수 있지만 이 자습서에서는 symlink 접근 방식을 채택합니다. 결과적으로 easy-rsa 패키지에 대한 모든 업데이트는 PKI의 스크립트에 자동으로 반영됩니다.

새 PKI 디렉토리에 대한 액세스를 제한하려면 소유자만 chmod 명령을 사용하여 액세스할 수 있도록 해야 합니다.

  1. chmod 700 /home/sammy/easy-rsa

마지막으로 easy-rsa 디렉토리 내에서 PKI를 초기화합니다.

  1. cd ~/easy-rsa
  2. ./easyrsa init-pki
Output
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/easy-rsa/pki

이 섹션을 완료하면 인증 기관을 만드는 데 필요한 모든 파일이 포함된 디렉터리가 생깁니다. 다음 섹션에서는 CA의 개인 키와 공개 인증서를 만듭니다.

3단계 - 인증 기관 생성

CA의 개인 키와 인증서를 생성하기 전에 일부 기본값으로 vars라는 파일을 생성하고 채워야 합니다. 먼저 easy-rsa 디렉토리로 cd한 다음 nano를 사용하여 vars 파일을 만들고 편집합니다. 또는 선호하는 텍스트 편집기:

  1. cd ~/easy-rsa
  2. nano vars

파일이 열리면 다음 줄을 붙여넣고 자신의 조직 정보를 반영하도록 강조 표시된 각 값을 편집합니다. 여기서 중요한 부분은 값을 비워 두지 않는 것입니다.

~/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "NewYork" set_var EASYRSA_REQ_CITY "New York City" set_var EASYRSA_REQ_ORG "DigitalOcean" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"

완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X를 누른 다음 Y와 ENTER를 눌러 확인할 수 있습니다. 이제 CA를 구축할 준비가 되었습니다.

인증 기관에 대한 루트 공개 및 개인 키 쌍을 생성하려면 ./easy-rsa 명령을 다시 실행합니다. 이번에는 build-ca 옵션을 사용합니다.

  1. ./easyrsa build-ca

출력에서 OpenSSL 버전에 대한 일부 줄이 표시되고 키 쌍에 대한 암호를 입력하라는 메시지가 표시됩니다. 강력한 암호를 선택하고 안전한 곳에 기록해 두십시오. 예를 들어 인증서 서명 또는 취소와 같이 CA와 상호 작용해야 할 때마다 암호를 입력해야 합니다.

또한 CA의 일반 이름(CN)을 확인하라는 메시지가 표시됩니다. CN은 인증 기관 컨텍스트에서 이 시스템을 참조하는 데 사용되는 이름입니다. CA의 일반 이름에는 임의의 문자열을 입력할 수 있지만 단순성을 위해 Enter 키를 눌러 기본 이름을 수락합니다.

Output
. . . Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: . . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/sammy/easy-rsa/pki/ca.crt

참고: CA와 상호 작용할 때마다 암호를 묻는 메시지를 표시하지 않으려면 다음과 같이 nopass 옵션과 함께 build-ca 명령을 실행할 수 있습니다. 이것:

  1. ./easyrsa build-ca nopass

이제 ~/easy-rsa/pki/ca.crt~/easy-rsa/pki/private/ca.key라는 두 개의 중요한 파일이 있습니다. 인증 기관의 공용 및 개인 구성 요소.

  • ca.crt는 CA의 공개 인증서 파일입니다. 사용자, 서버 및 클라이언트는 이 인증서를 사용하여 동일한 신뢰 웹의 일부인지 확인합니다. CA를 사용하는 모든 사용자와 서버는 이 파일의 복사본을 가지고 있어야 합니다. 모든 당사자는 공개 인증서에 의존하여 누군가가 시스템을 사칭하고 중간자 공격을 수행하지 않도록 합니다.\n
  • ca.key는 CA가 서버 및 클라이언트의 인증서에 서명하는 데 사용하는 개인 키입니다. 공격자가 CA 및 ca.key 파일에 대한 액세스 권한을 얻으면 CA를 제거해야 합니다. 이것이 바로 ca.key 파일이 CA 시스템에만 있어야 하고 이상적으로는 추가 보안 수단으로 인증서 요청에 서명하지 않을 때 CA 시스템을 오프라인으로 유지해야 하는 이유입니다.\n

이를 통해 CA가 준비되었으며 인증서 요청에 서명하고 인증서를 취소하는 데 사용할 준비가 되었습니다.

4단계 - 인증 기관의 공용 인증서 배포

이제 CA가 구성되었으며 CA를 사용하도록 구성하려는 시스템의 신뢰 루트 역할을 할 준비가 되었습니다. CA의 인증서를 OpenVPN 서버, 웹 서버, 메일 서버 등에 추가할 수 있습니다. 네트워크에 있는 다른 사용자 또는 서버의 신원을 확인해야 하는 모든 사용자 또는 서버는 운영 체제의 인증서 저장소로 가져온 ca.crt 파일의 복사본을 가지고 있어야 합니다.

CA의 공개 인증서를 다른 서버나 로컬 컴퓨터와 같은 두 번째 Linux 시스템으로 가져오려면 먼저 CA 서버에서 ca.crt 파일의 복사본을 얻습니다. cat 명령을 사용하여 터미널에 출력한 다음 인증서를 가져오는 두 번째 컴퓨터의 파일에 복사하여 붙여넣을 수 있습니다. scp 또는 rsync와 같은 도구를 사용하여 시스템 간에 파일을 전송할 수도 있습니다. 모든 시스템에서 작동하므로 이 단계에서는 nano와 함께 복사하여 붙여넣기를 사용합니다.

CA 서버에서 루트가 아닌 사용자로 다음 명령을 실행합니다.

  1. cat ~/easy-rsa/pki/ca.crt

다음과 유사한 출력이 터미널에 표시됩니다.

Output
-----BEGIN CERTIFICATE----- MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw . . . . . . -----END CERTIFICATE-----

-----BEGIN CERTIFICATE----------END CERTIFICATE----- 줄과 대시를 포함하여 모든 내용을 복사합니다.

두 번째 Linux 시스템에서 nano 또는 원하는 텍스트 편집기를 사용하여 /tmp/ca.crt라는 파일을 엽니다.

  1. nano /tmp/ca.crt

CA 서버에서 방금 복사한 내용을 편집기에 붙여넣습니다. 완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X를 누른 다음 YENTER를 눌러 확인합니다. .

이제 두 번째 Linux 시스템에 ca.crt 파일의 복사본이 있으므로 인증서를 운영 체제 인증서 저장소로 가져올 차례입니다.

Debian 및 Ubuntu 기반 시스템에서 다음 명령을 실행하여 인증서를 가져옵니다.

  1. sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
  2. sudo update-ca-certificates

최신 Debian 및 Ubuntu 시스템의 /usr/sbin/update-ca-certificates에 있는 update-ca-certificates 스크립트는 사용자의 에 없을 수 있습니다. 경로. PATH/usr/sbin을 추가하거나 /usr/sbin/update-ca-certificates를 실행하십시오.

CentOS, Fedora 또는 RedHat 기반 시스템에서 CA 서버의 인증서를 가져오려면 /tmp/ca.crt라는 파일의 이전 예제와 같이 파일 내용을 복사하여 시스템에 붙여넣습니다. . 다음으로 인증서를 /etc/pki/ca-trust/source/anchors/에 복사한 다음 update-ca-trust 명령을 실행합니다.

  1. sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
  2. sudo update-ca-trust

이제 두 번째 Linux 시스템은 CA 서버에서 서명한 모든 인증서를 신뢰합니다.

참고: 웹 서버와 함께 CA를 사용하고 Firefox를 브라우저로 사용하는 경우 공개 ca.crt 인증서를 Firefox로 직접 가져와야 합니다. Firefox는 로컬 운영 체제의 인증서 저장소를 사용하지 않습니다. CA 인증서를 Firefox에 추가하는 방법에 대한 자세한 내용은 Firefox에서 인증 기관(CA) 설정에 대한 Mozilla의 지원 문서를 참조하십시오.

CA를 사용하여 Windows 환경 또는 데스크톱 컴퓨터와 통합하는 경우 certutil.exe를 사용하여 CA 인증서를 설치하는 방법에 대한 설명서를 참조하십시오.

이 자습서를 다른 자습서의 전제 조건으로 사용하거나 인증서 서명 및 해지 방법에 익숙한 경우 여기에서 중지할 수 있습니다. 인증서 서명 및 해지 방법에 대해 자세히 알아보려면 다음 선택적 섹션에서 각 프로세스를 자세히 설명합니다.

5단계 - 인증서 서명 요청 생성 및 인증서 해지(선택 사항)

자습서의 다음 섹션은 선택 사항입니다. 이전 단계를 모두 완료한 경우 다른 자습서의 전제 조건으로 사용할 수 있는 완전히 구성되고 작동하는 인증 기관이 있습니다. CA의 ca.crt 파일을 가져와 네트워크에서 CA가 서명한 인증서를 확인할 수 있습니다.

인증서 요청에 서명하는 방법과 인증서를 취소하는 방법에 대해 연습하고 자세히 알아보려면 이 선택적 섹션에서 두 프로세스의 작동 방식을 설명합니다.

6단계 - 실습 인증서 요청 생성 및 서명(선택 사항)

이제 CA를 사용할 준비가 되었으므로 개인 키 및 인증서 요청 생성을 연습하여 서명 및 배포 프로세스에 익숙해질 수 있습니다.

인증서 서명 요청(CSR)은 공개 키, 요청 시스템에 대한 식별 정보, 요청 당사자의 개인 키를 사용하여 생성되는 요청 자체의 서명의 세 부분으로 구성됩니다. 개인 키는 비밀로 유지되며 서명된 공개 인증서가 있는 사람은 누구나 해독할 수 있는 정보를 암호화하는 데 사용됩니다.

다음 단계는 Debian, Ubuntu 또는 이들 중 하나에서 파생된 배포를 실행하는 두 번째 Linux 시스템에서 실행됩니다. 다른 원격 서버이거나 랩톱 또는 데스크톱 컴퓨터와 같은 로컬 Linux 시스템일 수 있습니다. easy-rsa는 모든 시스템에서 기본적으로 사용할 수 없으므로 openssl 도구를 사용하여 개인 키와 인증서를 생성합니다.

openssl은 일반적으로 대부분의 Linux 배포판에 기본적으로 설치되지만 확실히 하기 위해 시스템에서 다음을 실행하십시오.

  1. sudo apt update
  2. sudo apt install openssl

openssl을 설치하라는 메시지가 표시되면 y를 눌러 설치 단계를 계속합니다. 이렇게 하면 OpenSSL 라이브러리가 업그레이드될 수 있으며 이전 OpenSSL 라이브러리를 사용하는 일부 서비스를 다시 시작하라는 메시지가 표시될 수 있습니다. 원하는 경우 확인을 선택하여 이러한 서비스를 다시 시작하십시오.

이제 openssl로 사례 CSR을 생성할 준비가 되었습니다.

CSR을 만들기 위해 완료해야 하는 첫 번째 단계는 개인 키를 생성하는 것입니다. openssl을 사용하여 개인 키를 생성하려면 practice-csr 디렉토리를 생성한 다음 그 안에 키를 생성합니다. 사용자나 다른 CA를 식별하는 데 사용되는 인증서를 만드는 것과는 반대로 sammy-server라는 가상 서버에 대해 이 요청을 할 것입니다.

  1. mkdir ~/practice-csr
  2. cd ~/practice-csr
  3. openssl genrsa -out sammy-server.key
Output
Generating RSA private key, 2048 bit long modulus (2 primes) . . . . . . e is 65537 (0x010001)

이제 개인 키가 있으므로 다시 openssl 유틸리티를 사용하여 해당 CSR을 생성할 수 있습니다. 국가, 주 및 도시와 같은 여러 필드를 작성하라는 메시지가 표시됩니다. 필드를 공백으로 두려면 .를 입력할 수 있지만 실제 CSR인 경우 위치 및 조직에 올바른 값을 사용하는 것이 가장 좋습니다. 그러나 일반 이름(CN)을 공백으로 두지 마십시오. 이 필드는 필수이며 CA는 이 필드가 없으면 인증서에 서명할 수 없습니다.

  1. openssl req -new -key sammy-server.key -out sammy-server.req
Output
. . . ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:New York Locality Name (eg, city) [Default City]:New York City Organization Name (eg, company) [Default Company Ltd]:DigitalOcean Organizational Unit Name (eg, section) []:Community Common Name (eg, your name or your server's hostname) []:sammy-server Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:

대화형 프롬프트를 통하지 않고 openssl 호출의 일부로 해당 값을 자동으로 추가하려면 OpenSSL에 -subj 인수를 전달할 수 있습니다. 실습 위치, 조직 및 서버 이름과 일치하도록 강조 표시된 값을 편집해야 합니다.

  1. openssl req -new -key sammy-server.key -out server.req -subj \
  2. /C=US/ST=New\ York/L=New\ York\ City/O=DigitalOcean/OU=Community/CN=sammy-server

CSR의 내용을 확인하려면 openssl을 사용하여 요청 파일을 읽고 내부 필드를 검사할 수 있습니다.

  1. openssl req -in sammy-server.req -noout -subject
Output
subject=C = US, ST = New York, L = New York City, O = DigitalOcean, OU = Community, CN = sammy-server

연습 인증서 요청의 제목에 만족하면 scp를 사용하여 sammy-server.req 파일을 CA 서버에 복사합니다.

  1. scp sammy-server.req sammy@your_ca_server_ip:/tmp/sammy-server.req

이 단계에서는 sammy-server라는 가상 서버에 대한 인증서 서명 요청을 생성했습니다. 실제 시나리오에서 요청은 테스트를 위해 TLS 인증서가 필요한 스테이징 또는 개발 웹 서버와 같은 것일 수 있습니다. 또는 사용자가 VPN에 연결할 수 있도록 인증서를 요청하는 OpenVPN 서버에서 올 수 있습니다. 다음 단계에서는 CA 서버의 개인 키를 사용하여 인증서 서명 요청에 서명하는 작업을 진행합니다.

7단계 - CSR 서명(선택 사항)

이전 단계에서 가상 서버에 대한 실습 인증서 요청 및 키를 만들었습니다. CA 서버의 /tmp 디렉토리에 복사하여 서명이 필요한 CSR 요청을 보내는 실제 클라이언트 또는 서버가 있는 경우 사용할 프로세스를 에뮬레이션했습니다.

가상 시나리오를 계속 진행하면 이제 CA 서버가 연습 인증서를 가져와서 서명해야 합니다. CA에서 인증서 요청의 유효성을 검사하고 서버로 다시 전달하면 인증 기관을 신뢰하는 클라이언트도 새로 발급된 인증서를 신뢰할 수 있습니다.

우리는 easy-rsa 유틸리티를 사용할 수 있는 CA의 PKI 내에서 작동할 것이므로 서명 단계에서는 easy-rsa 유틸리티를 사용하여 작업을 더 쉽게 할 것입니다. 이전 예제에서 했던 것처럼 openssl을 직접 사용합니다.

가상 CSR에 서명하는 첫 번째 단계는 easy-rsa 스크립트를 사용하여 인증서 요청을 가져오는 것입니다.

  1. cd ~/easy-rsa
  2. ./easyrsa import-req /tmp/sammy-server.req sammy-server
Output
. . . The request has been successfully imported with a short name of: sammy-server You may now use this name to perform signing operations on this request.

이제 sign-req 옵션과 함께 easyrsa 스크립트를 실행하고 CSR에 포함된 요청 유형 및 일반 이름을 실행하여 요청에 서명할 수 있습니다. 요청 유형은 client, server 또는 ca 중 하나일 수 있습니다. 가상 서버에 대한 인증서로 연습하고 있으므로 server 요청 유형을 사용해야 합니다.

  1. ./easyrsa sign-req server sammy-server

출력에서 요청이 신뢰할 수 있는 소스에서 온 것인지 확인하라는 메시지가 표시됩니다. yes를 입력한 다음 ENTER를 눌러 다음을 확인합니다.

Output
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/sammy-server.crt

CA 키를 암호화한 경우 이 시점에서 비밀번호를 입력하라는 메시지가 표시됩니다.

이러한 단계를 완료하면 /home/sammy/easy-rsa/pki/private/ca.keysammy-server.req CSR에 서명했습니다. 코드>. 결과 sammy-server.crt 파일에는 실습 서버의 공개 암호화 키와 CA 서버의 새 서명이 포함되어 있습니다. 서명의 요점은 CA를 신뢰하는 모든 사람에게 sammy-server 인증서도 신뢰할 수 있음을 알리는 것입니다.

이 요청이 웹 서버 또는 VPN 서버와 같은 실제 서버에 대한 것이라면 CA 서버의 마지막 단계는 새로운 sammy-server.crtca.crt 코드를 배포하는 것입니다. 파일을 CA 서버에서 CSR 요청을 한 원격 서버로:

  1. scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
  2. scp pki/ca.crt sammy@your_server_ip:/tmp

이 시점에서 웹 서버, VPN, 구성 관리 도구, 데이터베이스 시스템 또는 클라이언트 인증 목적으로 발급된 인증서를 사용할 수 있습니다.

8단계 - 인증서 해지(선택 사항)

경우에 따라 사용자나 서버가 인증서를 사용하지 못하도록 인증서를 해지해야 할 수도 있습니다. 누군가의 노트북을 도난당했거나 웹 서버가 손상되었거나 직원이나 계약자가 조직을 떠났을 수 있습니다.

인증서를 해지하려면 일반적인 프로세스는 다음 단계를 따릅니다.

  1. ./easyrsa revoke client_name 명령을 사용하여 인증서를 취소합니다.
  2. ./easyrsa gen-crl 명령으로 새 CRL을 생성합니다.
  3. 업데이트된 crl.pem 파일을 CA에 의존하는 서버로 전송하고 해당 시스템에서 파일을 참조하는 프로그램의 필수 디렉터리에 복사합니다.
  4. CA 및 CRL 파일을 사용하는 모든 서비스를 다시 시작하십시오.

이 프로세스를 사용하여 언제든지 이전에 발급한 인증서를 해지할 수 있습니다. revoke 명령부터 시작하여 다음 섹션에서 각 단계를 자세히 살펴보겠습니다.

인증서 취소

인증서를 취소하려면 CA 서버의 easy-rsa 디렉토리로 이동합니다.

  1. cd ~/easy-rsa

다음으로 revoke 옵션과 함께 easyrsa 스크립트를 실행하고 취소하려는 클라이언트 이름을 입력합니다. 위의 연습 예에 따라 인증서의 일반 이름은 sammy-server입니다.

  1. ./easyrsa revoke sammy-server

그러면 를 입력하여 취소를 확인하라는 메시지가 표시됩니다.

Output
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes . . . Revoking Certificate 8348B3F146A765581946040D5C4D590A . . .

Revoking Certificate 줄에서 강조 표시된 값을 확인합니다. 이 값은 해지되는 인증서의 고유한 일련 번호입니다. 이 섹션의 마지막 단계에서 해지 목록을 검사하여 인증서가 있는지 확인하려면 이 값이 필요합니다.

조치를 확인한 후 CA는 인증서를 해지합니다. 그러나 CA에 의존하는 원격 시스템은 인증서가 해지되었는지 여부를 확인할 방법이 없습니다. 사용자와 서버는 CA의 CRL(Certificate Revocation List)이 CA에 의존하는 모든 시스템에 배포될 때까지 계속해서 인증서를 사용할 수 있습니다.

다음 단계에서는 CRL을 생성하거나 기존 crl.pem 파일을 업데이트합니다.

인증서 해지 목록 생성

이제 인증서를 해지했으므로 CA 서버에서 해지된 인증서 목록을 업데이트하는 것이 중요합니다. 업데이트된 해지 목록이 있으면 CA에 유효한 인증서가 있는 사용자와 시스템을 알 수 있습니다.

CRL을 생성하려면 ~/easy-rsa 디렉토리 내에서 gen-crl 옵션과 함께 easy-rsa 명령을 실행합니다.

  1. ./easyrsa gen-crl

ca.key 파일을 생성할 때 암호를 사용한 경우 암호를 입력하라는 메시지가 표시됩니다. gen-crl 명령은 해당 CA에 대해 해지된 인증서의 업데이트된 목록이 포함된 crl.pem이라는 파일을 생성합니다.

다음으로 업데이트된 crl.pem 파일을 gen-crl 명령을 실행할 때마다 이 CA에 의존하는 모든 서버와 클라이언트로 전송해야 합니다. 그렇지 않으면 클라이언트와 시스템은 CA를 사용하는 서비스와 시스템에 계속 액세스할 수 있습니다. 이러한 서비스는 인증서의 해지 상태를 알아야 하기 때문입니다.

인증서 해지 목록 전송

이제 CA 서버에서 CRL을 생성했으므로 이를 CA에 의존하는 원격 시스템으로 전송해야 합니다. 이 파일을 서버로 전송하려면 scp 명령을 사용할 수 있습니다.

참고: 이 자습서에서는 CRL을 수동으로 생성하고 배포하는 방법을 설명합니다. OCSP-Stapling과 같은 해지 목록을 배포하고 확인하는 보다 강력하고 자동화된 방법이 있지만 이러한 방법을 구성하는 것은 이 문서의 범위를 벗어납니다.

루트가 아닌 사용자로 CA 서버에 로그인했는지 확인하고 your_server_ip 대신 자신의 서버 IP 또는 DNS 이름으로 대체하여 다음을 실행합니다.

  1. scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

이제 파일이 원격 시스템에 있으므로 마지막 단계는 해지 목록의 새 복사본으로 모든 서비스를 업데이트하는 것입니다.

CRL을 지원하는 서비스 업데이트

crl.pem 파일을 사용하는 서비스를 업데이트하는 데 사용해야 하는 단계를 나열하는 것은 이 자습서의 범위를 벗어납니다. 일반적으로 crl.pem 파일을 서비스가 예상하는 위치에 복사한 다음 systemctl을 사용하여 다시 시작해야 합니다.

crl.pem 파일로 서비스를 업데이트하면 서비스에서 해지된 인증서를 사용하는 클라이언트 또는 서버의 연결을 거부할 수 있습니다.

CRL 내용 검사 및 확인

예를 들어 폐기된 인증서 목록을 확인하기 위해 CRL 파일을 검사하려면 CA 서버의 easy-rsa 디렉토리 내에서 다음 openssl 명령을 사용하십시오. :

  1. cd ~/easy-rsa
  2. openssl crl -in pki/crl.pem -noout -text

openssl 도구가 crl.pem 파일의 복사본과 함께 설치된 모든 서버 또는 시스템에서 이 명령을 실행할 수도 있습니다. 예를 들어 crl.pem 파일을 두 번째 시스템으로 전송하고 sammy-server 인증서가 해지되었는지 확인하려는 경우 openssl을 사용할 수 있습니다. 명령을 다음과 같이 여기에서 강조 표시된 인증서 대신 이전에 인증서를 해지할 때 기록한 일련 번호로 대체합니다.

  1. openssl crl -in /tmp/crl.pem -noout -text |grep -A 1 8348B3F146A765581946040D5C4D590A
Output
Serial Number: 8348B3F146A765581946040D5C4D590A Revocation Date: Apr 1 20:48:02 2020 GMT

해지 단계에서 기록한 고유한 일련 번호를 확인하기 위해 grep 명령이 어떻게 사용되는지 확인하십시오. 이제 사용자 및 서비스에 대한 액세스를 제한하는 데 의존하는 모든 시스템에서 인증서 해지 목록의 내용을 확인할 수 있습니다.

결론

이 자습서에서는 독립 실행형 Debian 11 서버에서 Easy-RSA 패키지를 사용하여 개인 인증 기관을 만들었습니다. CA에 의존하는 당사자 간에 신뢰 모델이 작동하는 방식을 배웠습니다. 또한 실습 서버에 대한 인증서 서명 요청(CSR)을 생성하고 서명한 다음 인증서를 해지했습니다. 마지막으로 CA에 의존하는 모든 시스템에 대한 CRL(Certificate Revocation List)을 생성하고 배포하여 서비스에 액세스해서는 안 되는 사용자나 서버가 액세스하지 못하도록 합니다.

이제 사용자를 위한 인증서를 발급하고 OpenVPN과 같은 서비스에서 사용할 수 있습니다. 또한 CA를 사용하여 비프로덕션 환경을 보호하기 위해 인증서로 개발 및 스테이징 웹 서버를 구성할 수 있습니다. 개발 중에 TLS 인증서와 함께 CA를 사용하면 코드와 환경이 프로덕션 환경과 최대한 일치하는지 확인할 수 있습니다.

OpenSSL 사용 방법에 대해 자세히 알아보려면 OpenSSL 필수 항목: SSL 인증서, 개인 키 및 CSR 작업 자습서에서 OpenSSL 기본 사항에 더 익숙해지는 데 도움이 되는 많은 추가 정보를 참조하세요.