주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체합니다.
Apache 웹 서버에서 인증서의 내부 CA 설정, 생성 및 설치를 위해 OCI 인증서 사용
소개
빠르게 진화하는 클라우드 컴퓨팅 및 디지털 보안 분야에서 디지털 인증서를 관리하는 강력하고 유연한 솔루션에 대한 요구가 그 어느 때보다 중요해졌습니다. Oracle Cloud Infrastructure(OCI) Certificate Service는 Oracle Cloud 에코시스템 내 인증서 수명 주기 관리의 복잡한 작업을 간소화하도록 설계된 강력하고 신뢰할 수 있는 툴로 부상하고 있습니다. OCI Certificates는 TLS(전송 계층 보안) 인증서를 만들고 관리하기 위한 서비스입니다. 이 무료 서비스를 통해 조직은 OCI 로드 밸런서, OCI API 게이트웨이, 웹 애플리케이션 방화벽 및 기타와 같은 OCI 서비스와 통합되어 고객 테넌시에서 자동으로 배포 및 갱신될 수 있는 전용 CA(인증 기관) 계층 및 TLS 인증서를 생성할 수 있습니다.
이 자습서에서는 OCI Certificates Service를 엔터프라이즈 인증서 관리 솔루션으로 활용하는 방법에 대해 알아봅니다. 관리자가 내부 CA를 생성하는 프로세스를 살펴보고 서버 관리자가 Apache 웹 서버에 대한 CSR(인증서 서명 요청)을 생성하도록 안내합니다. 또한 내부 CA를 사용하여 인증서를 생성하는 단계와 Apache 웹 서버에 이러한 인증서를 설치하는 방법을 설명합니다.
필요한 권한을 가진 관리자는 내부 웹 서버에 대한 내부 인증서를 발행하는 CA를 만듭니다. 또한 관리자는 동적 그룹을 생성하고 이 동적 그룹에 OCI 인증서 서비스에 대한 액세스 권한을 부여하는 정책을 설정합니다. 동적 그룹에 인스턴스를 추가하고 필요한 정책을 적용하면 해당 인스턴스에서 실행 중인 애플리케이션이 사용자 인증서나 구성 파일 없이도 OCI 인증서 서비스에 액세스할 수 있습니다.
관리자는 구획 세부정보 및 인증 기관 식별 정보, 특히 OCID(Oracle Cloud Identifier)를 서버 관리자와 공유합니다. OCID는 인증 기관에 대한 고유 식별자로 사용됩니다. 이 정보를 사용하여 서버 관리자는 계속해서 시스템에 OCI CLI(Oracle Cloud Infrastructure Command Line Interface)를 설치할 수 있습니다. 설치 후 서버 관리자는 OCI CLI를 사용하여 이전에 관리자가 생성한 인증 기관에서 인증서를 요청합니다. 이 체계적인 접근 방식을 통해 인증 기관을 적절히 식별할 수 있으므로 Oracle Cloud Infrastructure 환경에서 안전하고 효율적인 인증서 발행이 가능합니다.
목표
- Apache 웹 서버에서 인증서를 설정, 생성 및 설치하는 내부 인증 기관입니다.
필요 조건
-
리소스를 관리하려면 OCI 사용자에게 인증서 및 OCI 컴퓨트에 필요한 정책이 있어야 합니다. 모든 서비스의 정책 참조는 정책 참조를 참조하십시오.
-
CA를 생성하는 RSA 키 및 웹 서버로 지정된 컴퓨트 인스턴스의 가용성입니다. 자세한 내용은 저장소 마스터 암호화 키 생성을 참조하십시오.
참고:
인증 기관 생성, 인증서 생성, OCI IAM 정책 관리 등과 같은 작업은 OCI 콘솔을 사용하여 수행할 수 있습니다. 그러나 이 자습서에서는 CLI 명령이 사용됩니다.
OCI 관리자는 작업 1-3을 수행하고 서버 관리자는 작업 4-9를 수행해야 합니다.
작업 1: 인증 기관 생성
다음 명령을 사용하여 인증 기관을 만듭니다. Root Certificate Authority를 참조하십시오.
명령 형식:
oci certs-mgmt certificate-authority create-root-ca-by-generating-config-details --compartment-id <compartment_OCID> --name <CA_display_name> --subject <CA_subject_information> --kms-key-id <Vault_encryption_key_OCID>
참고: 제목은 값이 적합한 JSON이어야 하는 복합 유형입니다. 이 값은 명령줄에 문자열로 제공되거나
file://path/to/file
구문을 사용하여 파일로 전달될 수 있습니다. 이 자습서에서는 파일 접근 방식을 따릅니다.
샘플 명령:
다음 정보를 사용하여 샘플 파일 subject.json
를 생성합니다.
{
"commonName": "INTERNAL-ROOTCA"
}
oci certs-mgmt certificate-authority create-root-ca-by-generating-config-details --compartment-id ocid1.compartment.oc1..aaaaaaaabcdefghij12abcdefgh78abcde --name INTERNAL-ROOTCA --subject file://subject.json --kms-key-id ocid1.key.oc1.iad.abcdefghijklm.abcdefghijklmnop12abcdiklmnop56abcdef
작업 2: 동적 그룹 생성
다음 명령을 사용하여 동적 그룹을 만듭니다. Dynamic Group을 참조하십시오.
명령 형식:
oci iam dynamic-group create --compartment-id <Tenancy OCID> --description <description> --name <DG Name> --matching-rule <Matching Rule>
샘플 명령:
oci iam dynamic-group create --compartment-id ocid1.tenancy.oc1..aaaaaaaabbbbcdefgh12abcdabcdefghijkl --description Web-servers --name Web-servers-DG --matching-rule "instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaabcdefghij12abcde6abcdefghij78abcde'"
작업 3: 이 동적 그룹에 OCI 인증서 서비스에 대한 액세스 권한을 부여하는 데 필요한 정책을 생성합니다.
다음 명령을 사용하여 OCI IAM 정책을 생성합니다. OCI IAM 정책을 참조하십시오.
명령 형식:
oci iam policy create --compartment-id <compartment_id> --description <description> --name <name> --statements file://statements.json
샘플 명령:
다음 정보를 사용하여 statements.json
파일을 생성합니다.
[
"Allow dynamic-group Web-servers-DG to manage leaf-certificate-family in compartment chaitanyachintala",
"Allow dynamic-group Web-servers-DG to use certificate-authority-family in compartment chaitanyachintala"
]
oci iam policy create --compartment-id ocid1.compartment.oc1..aaaaaaaabcdefgh56abcdefghij78abcde --description Create-Certficate --name Cert-policies --statements file://statements.json
작업 4: 컴퓨트 인스턴스(Apache 웹 서버)에 OCI CLI 설치
OCI 명령줄 인터페이스(CLI)를 설치 및 구성합니다.
컴퓨트 인스턴스에 접속한 후 다음 명령을 실행하여 Linux 인스턴스에서 Python 및 OCI CLI 패키지를 설치하고 확인합니다.
sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli
작업 5: Apache 웹 서버에서 OpenSSL를 사용하여 CSR(인증서 서명 요청) 생성
-
디렉토리를 변경합니다.
cd /etc/pki/tls/private/
-
다음 정보로
examplecert.cnf
파일을 만들어 SAN(주체 대체 이름)으로 인증서 매개변수를 지정합니다.주: SAN 확장을 사용하면 도메인 이름 또는 IP 주소와 같은 추가 ID를 인증서에 연결할 수 있습니다. SAN 확장의 subject.The 사용은 SSL 인증서에 대한 표준 관행이며 공통 이름 사용을 대체하는 방법입니다.
[req] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = Texas L = Texas O = Elpmaxe CN = www.example.com [v3_req] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = example.com IP.1 = 1.1.1.1
-
다음 명령을 사용하여 CSR을 만듭니다.
openssl req -out example.csr -newkey rsa:2048 -nodes -keyout example.key -config examplecert.cnf
-
(선택 사항) 다음 명령을 사용하여 CSR을 확인합니다.
openssl req -noout -text -in example.csr
작업 6: OCI 관리자가 생성한 CA를 사용하여 인증서 생성
-
다음 명령을 사용하여
example.csr
파일의 내용을examplecsr
변수로 캡처합니다.examplecsr=$(cat example.csr)
-
내부 CA가 외부에서 발행한 인증서 관리를 만듭니다.
명령 형식:
oci certs-mgmt certificate create-certificate-managed-externally-issued-by-internal-ca --compartment-id <compartment_OCID> --csr-pem <csr_pem> --issuer-certificate-authority-id <CA_OCID> --name <Certificate-name>
샘플 명령:
oci certs-mgmt certificate create-certificate-managed-externally-issued-by-internal-ca --compartment-id ocid1.compartment.oc1..aaaaaaaabcdefghhij78abcde --csr-pem "$examplecsr" --issuer-certificate-authority-id ocid1.certificateauthority.oc1.iad.abcdefghi56abcdefghijklmnop --name example.com --auth instance_principal
주: 생성된 인증서의 OCID를 복사합니다.
작업 7: 인증서 및 인증서 체인 다운로드
주: 다음 명령을 root 유저로 실행합니다.
인증서 및 인증서 체인을 다운로드하는 명령입니다.
명령 형식:
oci certificates certificate-bundle get --certificate-id <Certificate_OCID>
샘플 명령 - 인증서:
oci certificates certificate-bundle get --certificate-id ocid1.certificate.oc1.iad.abcdefghijbcdefghijk --raw-output --query 'data."certificate-pem"' > certificate.crt --auth instance_principal
샘플 명령 - 인증서 체인:
oci certificates certificate-bundle get --certificate-id ocid1.certificate.oc1.iad.abcdefghip56abcdefghijk --raw-output --query 'data."cert-chain-pem"' > certificate-chain.pem --auth instance_principal
작업 8: 인증서로 Apache 웹 서버 설치 및 구성
-
httpd 패키지, Apache용 HTTPS 추가 기능 및 종속성을 설치합니다.
sudo dnf install httpd sudo dnf install mod_ssl
가장 좋은 방법은 HTTPS를 이전에 생성된 TLS 인증서와 함께 사용하여 웹 브라우저와 Apache 서버 간의 모든 통신을 보호하는 것입니다.
웹 서버의 루트 경로를 변경하려면
/etc/httpd/conf/httpd.conf
파일을 직접 편집하지 마십시오. 대신 선호하는 방법으로/etc/httpd/conf.d
디렉토리에 사이트별 구성 파일을 만듭니다. 다음 예에서는 가상 호스트에 대한 구성을 포함하도록/etc/httpd/conf.d/example.com.conf
파일이 만들어집니다. -
/etc/httpd/conf.d/example.com.conf
에 다음 정보를 추가하여 가상 호스트를 만듭니다.Listen *:443 <VirtualHost *:443> ServerName example.com ServerAlias www.example.com SSLEngine on SSLCertificateFile /etc/pki/tls/private/certificate.crt SSLCertificateKeyFile /etc/pki/tls/private/example.key DocumentRoot /var/www/example.com/html/ ErrorLog /var/log/httpd/example.com_error.log CustomLog /var/log/httpd/example.com_access.log combined </VirtualHost>
-
문서 루트 폴더를 생성합니다. 루트 폴더는 Apache가 브라우저에 제공할 웹 페이지를 호스트합니다.
sudo mkdir -p /var/www/example.com/html sudo echo "example.com" > /var/www/example.com/html/index.html sudo chown -R apache:apache /var/www/example.com/html
-
Apache 서비스를 다시 시작하여 새 구성을 로드합니다.
sudo systemctl restart httpd
주: "Cannot define multiple Listeners on the same IP:port" 오류 메시지가 나타나면
/etc/httpd/conf.d/ssl.conf
파일에서 Listen 443 https 행을 주석 처리합니다. -
방화벽을 구성합니다. 이러한 명령은 Apache HTTPS 서비스에 대한 방화벽 포트 443을 사용으로 설정하고 기본 방화벽 서비스를 다시 로드합니다.
sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload
주: 서브넷과 연관된 보안 목록 및 VNIC와 연관된 보안 그룹이 포트 443의 트래픽을 허용하는지 확인하십시오.
작업 9: 웹 페이지 테스트
-
호스트의 Curl: Apache 웹 서버가 실행 중인 호스트의 curl 명령을 사용하여 접속을 테스트합니다. curl failed to verify the legitimacy of the server 오류가 표시됩니다.
-
랩탑의 Curl: 랩탑 또는 다른 컴퓨터에서 curl을 사용하여 Apache 웹 서버에 대한 연결을 확인합니다. IP 주소 또는 호스트 이름을 서버의 실제 IP 주소 또는 호스트 이름으로 바꿉니다. 동일한 오류 curl failed to verify the legitimacy of the server이 표시됩니다.
-
웹 브라우저: 랩톱에서 웹 브라우저를 열고
https://your-server-ip
를 사용하여 웹 페이지에 액세스합니다. 브라우저에서 표시할 수 있는 보안 경고 또는 오류가 있는지 확인합니다.
모든 오류는 웹 서버에 설치된 인증서가 공용 인증 기관에서 발행되지 않고 내부 CA의 루트 인증서가 인증서 저장소에 존재하지 않는다는 사실에서 비롯됩니다.
-
인증서 체인 설치: 이전에 다운로드한 인증서 체인을 클라이언트 시스템의 루트 신뢰할 수 있는 기관에 설치합니다. 이 단계는 클라이언트가 Apache 웹 서버에서 제공하는 인증서를 인식하고 신뢰하는 데 중요합니다.
-
유효한 TLS 인증서로 웹 페이지에 액세스: 인증서 체인을 설치한 후 웹 브라우저를 사용하여 웹 페이지를 다시 방문하십시오. 이제 웹 페이지에 유효한 TLS 인증서가 제공되고 있으며 이전에 발생한 보안 경고 또는 오류를 해결해야 합니다.
이러한 단계에 따라 Apache 웹 서버가 내부 CA 인증서로 올바르게 구성되었고 클라이언트가 HTTPS를 통해 웹 페이지에 안전하게 액세스할 수 있는지 확인합니다.
관련 링크
확인
- 작성자 - Chaitanya Chintala(클라우드 보안 권고자)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Use OCI Certificates for Internal CA Setup, Creation, and Installation of certificates on Apache Web Server
F90568-01
January 2024
Copyright © 2024, Oracle and/or its affiliates.