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 서버에 로그인하고 다음을 실행합니다.
- sudo apt update
- sudo apt install easy-rsa
패키지를 다운로드하고 설치하라는 메시지가 표시됩니다. y
를 눌러 패키지 설치를 확인하십시오.
이제 설정에 필요한 모든 것이 있고 Easy-RSA를 사용할 준비가 되었습니다. 다음 단계에서는 공개 키 인프라를 만든 다음 인증 기관 구축을 시작합니다.
2단계 - 공개 키 인프라 디렉토리 준비
이제 easy-rsa
를 설치했으므로 CA 서버에 PKI(Public Key Infrastructure)의 뼈대를 만들 차례입니다. 여전히 루트가 아닌 사용자로 로그인되어 있는지 확인하고 easy-rsa
디렉토리를 생성합니다. 일반 사용자는 승격된 권한 없이 CA를 관리하고 상호 작용해야 하므로 sudo를 사용하여 다음 명령을 실행하지 않도록 하십시오.
- mkdir ~/easy-rsa
이렇게 하면 홈 폴더에 easy-rsa
라는 새 디렉토리가 생성됩니다. 이 디렉토리를 사용하여 이전 단계에서 설치한 easy-rsa
패키지 파일을 가리키는 심볼릭 링크를 생성합니다. 이러한 파일은 CA 서버의 /usr/share/easy-rsa
폴더에 있습니다.
ln
명령을 사용하여 심볼릭 링크를 만듭니다.
- ln -s /usr/share/easy-rsa/* ~/easy-rsa/
참고: 다른 가이드에서는 easy-rsa
패키지 파일을 PKI 디렉터리에 복사하도록 지시할 수 있지만 이 자습서에서는 symlink 접근 방식을 채택합니다. 결과적으로 easy-rsa
패키지에 대한 모든 업데이트는 PKI의 스크립트에 자동으로 반영됩니다.
새 PKI 디렉토리에 대한 액세스를 제한하려면 소유자만 chmod
명령을 사용하여 액세스할 수 있도록 해야 합니다.
- chmod 700 /home/sammy/easy-rsa
마지막으로 easy-rsa
디렉토리 내에서 PKI를 초기화합니다.
- cd ~/easy-rsa
- ./easyrsa init-pki
Outputinit-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
파일을 만들고 편집합니다. 또는 선호하는 텍스트 편집기:
- cd ~/easy-rsa
- nano vars
파일이 열리면 다음 줄을 붙여넣고 자신의 조직 정보를 반영하도록 강조 표시된 각 값을 편집합니다. 여기서 중요한 부분은 값을 비워 두지 않는 것입니다.
~/easy-rsa/varsset_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
옵션을 사용합니다.
- ./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
명령을 실행할 수 있습니다. 이것:
- ./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 서버에서 루트가 아닌 사용자로 다음 명령을 실행합니다.
- cat ~/easy-rsa/pki/ca.crt
다음과 유사한 출력이 터미널에 표시됩니다.
Output-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw
. . .
. . .
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
및 -----END CERTIFICATE-----
줄과 대시를 포함하여 모든 내용을 복사합니다.
두 번째 Linux 시스템에서 nano
또는 원하는 텍스트 편집기를 사용하여 /tmp/ca.crt
라는 파일을 엽니다.
- nano /tmp/ca.crt
CA 서버에서 방금 복사한 내용을 편집기에 붙여넣습니다. 완료되면 파일을 저장하고 닫습니다. nano
를 사용하는 경우 CTRL+X
를 누른 다음 Y
및 ENTER
를 눌러 확인합니다. .
이제 두 번째 Linux 시스템에 ca.crt
파일의 복사본이 있으므로 인증서를 운영 체제 인증서 저장소로 가져올 차례입니다.
Debian 및 Ubuntu 기반 시스템에서 다음 명령을 실행하여 인증서를 가져옵니다.
- sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
- 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
명령을 실행합니다.
- sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
- 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 배포판에 기본적으로 설치되지만 확실히 하기 위해 시스템에서 다음을 실행하십시오.
- sudo apt update
- sudo apt install openssl
openssl
을 설치하라는 메시지가 표시되면 y
를 눌러 설치 단계를 계속합니다. 이렇게 하면 OpenSSL 라이브러리가 업그레이드될 수 있으며 이전 OpenSSL 라이브러리를 사용하는 일부 서비스를 다시 시작하라는 메시지가 표시될 수 있습니다. 원하는 경우 확인을 선택하여 이러한 서비스를 다시 시작하십시오.
이제 openssl
로 사례 CSR을 생성할 준비가 되었습니다.
CSR을 만들기 위해 완료해야 하는 첫 번째 단계는 개인 키를 생성하는 것입니다. openssl
을 사용하여 개인 키를 생성하려면 practice-csr
디렉토리를 생성한 다음 그 안에 키를 생성합니다. 사용자나 다른 CA를 식별하는 데 사용되는 인증서를 만드는 것과는 반대로 sammy-server
라는 가상 서버에 대해 이 요청을 할 것입니다.
- mkdir ~/practice-csr
- cd ~/practice-csr
- openssl genrsa -out sammy-server.key
OutputGenerating RSA private key, 2048 bit long modulus (2 primes)
. . .
. . .
e is 65537 (0x010001)
이제 개인 키가 있으므로 다시 openssl
유틸리티를 사용하여 해당 CSR을 생성할 수 있습니다. 국가, 주 및 도시와 같은 여러 필드를 작성하라는 메시지가 표시됩니다. 필드를 공백으로 두려면 .
를 입력할 수 있지만 실제 CSR인 경우 위치 및 조직에 올바른 값을 사용하는 것이 가장 좋습니다. 그러나 일반 이름(CN)을 공백으로 두지 마십시오. 이 필드는 필수이며 CA는 이 필드가 없으면 인증서에 서명할 수 없습니다.
- 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
인수를 전달할 수 있습니다. 실습 위치, 조직 및 서버 이름과 일치하도록 강조 표시된 값을 편집해야 합니다.
- openssl req -new -key sammy-server.key -out server.req -subj \
- /C=US/ST=New\ York/L=New\ York\ City/O=DigitalOcean/OU=Community/CN=sammy-server
CSR의 내용을 확인하려면 openssl
을 사용하여 요청 파일을 읽고 내부 필드를 검사할 수 있습니다.
- openssl req -in sammy-server.req -noout -subject
Outputsubject=C = US, ST = New York, L = New York City, O = DigitalOcean, OU = Community, CN = sammy-server
연습 인증서 요청의 제목에 만족하면 scp
를 사용하여 sammy-server.req
파일을 CA 서버에 복사합니다.
- 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
스크립트를 사용하여 인증서 요청을 가져오는 것입니다.
- cd ~/easy-rsa
- ./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
요청 유형을 사용해야 합니다.
- ./easyrsa sign-req server sammy-server
출력에서 요청이 신뢰할 수 있는 소스에서 온 것인지 확인하라는 메시지가 표시됩니다. yes
를 입력한 다음 ENTER를 눌러 다음을 확인합니다.
OutputYou 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.key에 있는 CA 서버의 개인 키를 사용하여
sammy-server.req
CSR에 서명했습니다. 코드>. 결과 sammy-server.crt
파일에는 실습 서버의 공개 암호화 키와 CA 서버의 새 서명이 포함되어 있습니다. 서명의 요점은 CA를 신뢰하는 모든 사람에게 sammy-server
인증서도 신뢰할 수 있음을 알리는 것입니다.
이 요청이 웹 서버 또는 VPN 서버와 같은 실제 서버에 대한 것이라면 CA 서버의 마지막 단계는 새로운 sammy-server.crt
및 ca.crt 코드를 배포하는 것입니다. code> 파일을 CA 서버에서 CSR 요청을 한 원격 서버로:
- scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
- scp pki/ca.crt sammy@your_server_ip:/tmp
이 시점에서 웹 서버, VPN, 구성 관리 도구, 데이터베이스 시스템 또는 클라이언트 인증 목적으로 발급된 인증서를 사용할 수 있습니다.
8단계 - 인증서 해지(선택 사항)
경우에 따라 사용자나 서버가 인증서를 사용하지 못하도록 인증서를 해지해야 할 수도 있습니다. 누군가의 노트북을 도난당했거나 웹 서버가 손상되었거나 직원이나 계약자가 조직을 떠났을 수 있습니다.
인증서를 해지하려면 일반적인 프로세스는 다음 단계를 따릅니다.
./easyrsa revoke client_name
명령을 사용하여 인증서를 취소합니다../easyrsa gen-crl
명령으로 새 CRL을 생성합니다.- 업데이트된
crl.pem
파일을 CA에 의존하는 서버로 전송하고 해당 시스템에서 파일을 참조하는 프로그램의 필수 디렉터리에 복사합니다. - CA 및 CRL 파일을 사용하는 모든 서비스를 다시 시작하십시오.
이 프로세스를 사용하여 언제든지 이전에 발급한 인증서를 해지할 수 있습니다. revoke
명령부터 시작하여 다음 섹션에서 각 단계를 자세히 살펴보겠습니다.
인증서 취소
인증서를 취소하려면 CA 서버의 easy-rsa
디렉토리로 이동합니다.
- cd ~/easy-rsa
다음으로 revoke
옵션과 함께 easyrsa
스크립트를 실행하고 취소하려는 클라이언트 이름을 입력합니다. 위의 연습 예에 따라 인증서의 일반 이름은 sammy-server
입니다.
- ./easyrsa revoke sammy-server
그러면 예
를 입력하여 취소를 확인하라는 메시지가 표시됩니다.
OutputPlease 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
명령을 실행합니다.
- ./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 이름으로 대체하여 다음을 실행합니다.
- 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
명령을 사용하십시오. :
- cd ~/easy-rsa
- openssl crl -in pki/crl.pem -noout -text
openssl
도구가 crl.pem
파일의 복사본과 함께 설치된 모든 서버 또는 시스템에서 이 명령을 실행할 수도 있습니다. 예를 들어 crl.pem
파일을 두 번째 시스템으로 전송하고 sammy-server
인증서가 해지되었는지 확인하려는 경우 openssl을 사용할 수 있습니다.
명령을 다음과 같이 여기에서 강조 표시된 인증서 대신 이전에 인증서를 해지할 때 기록한 일련 번호로 대체합니다.
- 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 기본 사항에 더 익숙해지는 데 도움이 되는 많은 추가 정보를 참조하세요.