주:

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 환경에서 안전하고 효율적인 인증서 발행이 가능합니다.

목표

필요 조건

참고:

작업 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(인증서 서명 요청) 생성

  1. 디렉토리를 변경합니다.

    cd /etc/pki/tls/private/
    
  2. 다음 정보로 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
    
  3. 다음 명령을 사용하여 CSR을 만듭니다.

    openssl req -out example.csr -newkey rsa:2048 -nodes -keyout example.key -config examplecert.cnf
    
  4. (선택 사항) 다음 명령을 사용하여 CSR을 확인합니다.

    openssl req -noout -text -in example.csr
    

작업 6: OCI 관리자가 생성한 CA를 사용하여 인증서 생성

  1. 다음 명령을 사용하여 example.csr 파일의 내용을 examplecsr 변수로 캡처합니다.

    examplecsr=$(cat example.csr)
    
  2. 내부 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 웹 서버 설치 및 구성

  1. 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 파일이 만들어집니다.

  2. /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>
    
  3. 문서 루트 폴더를 생성합니다. 루트 폴더는 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
    
  4. Apache 서비스를 다시 시작하여 새 구성을 로드합니다.

    sudo systemctl restart httpd
    

    : "Cannot define multiple Listeners on the same IP:port" 오류 메시지가 나타나면 /etc/httpd/conf.d/ssl.conf 파일에서 Listen 443 https 행을 주석 처리합니다.

  5. 방화벽을 구성합니다. 이러한 명령은 Apache HTTPS 서비스에 대한 방화벽 포트 443을 사용으로 설정하고 기본 방화벽 서비스를 다시 로드합니다.

    sudo firewall-cmd --add-service=https --permanent
    sudo firewall-cmd --reload
    

    주: 서브넷과 연관된 보안 목록 및 VNIC와 연관된 보안 그룹이 포트 443의 트래픽을 허용하는지 확인하십시오.

작업 9: 웹 페이지 테스트

모든 오류는 웹 서버에 설치된 인증서가 공용 인증 기관에서 발행되지 않고 내부 CA의 루트 인증서가 인증서 저장소에 존재하지 않는다는 사실에서 비롯됩니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.