Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

gNOI 인증서 관리 서비스

요약 gNOI CertificateManagement 서비스를 사용하여 대상 네트워크 요소의 인증서를 관리합니다.

개요

패키지의 gnoi.certificate gNOI CertificateManagement 서비스는 대상 네트워크 요소에서 인증서 관리를 처리합니다. 프로토 정의 파일은 https://github.com/openconfig/gnoi/blob/master/cert/cert.proto 에 있습니다.

PKI(공개 키 인프라)는 공개 암호화 키의 배포 및 식별을 지원하여 사용자가 인터넷과 같은 네트워크를 통해 데이터를 안전하게 교환하고 상대방의 신원을 확인할 수 있도록 합니다. Junos PKI를 사용하면 인증서 다운로드, 생성 및 확인을 포함하여 Junos 디바이스에서 공개 키 인증서를 관리할 수 있습니다. gNOI 서비스는 Junos PKI CertificateManagement 를 통해 인증서 관리를 위한 작업을 정의합니다. 두 가지 주요 작업은 다음과 같습니다.

  • 설치 - 대상 네트워크 디바이스에 새 인증서 ID를 사용하여 새 인증서를 설치합니다. 인증서 ID가 이미 있는 경우 작업에서 오류를 반환합니다.

  • Rotate(회전) - 대상 네트워크 디바이스에서 기존 인증서 ID가 이미 있는 기존 인증서를 교체합니다. 스트림이 중단되거나 프로세스 중에 단계가 실패하면 디바이스는 원래 인증서로 롤백됩니다.

그림 1은 및 Rotate() 작업의 워크플로우를 Install() 간략하게 설명합니다. 두 작업 모두에서 클라이언트는 CSR(인증서 서명 요청) 자체를 생성하거나 대상에 CSR을 생성하도록 요청할 수 있습니다. 두 경우 모두 클라이언트는 CSR을 인증 기관(CA)에 전달하여 디지털 인증서를 요청합니다. 그런 다음 클라이언트는 작업에 대한 새 인증서 ID 또는 작업에 대한 Install() 기존 인증서 ID를 사용하여 대상에 인증서를 로드합니다Rotate(). 작업의 경우 Rotate() 클라이언트는 대체 인증서의 유효성을 검사하고 유효성 검사의 Rotate() 성공 또는 실패에 따라 작업을 완료하거나 취소해야 합니다. 클라이언트가 작업을 취소하면 서버는 인증서, 키 쌍 및 CA 번들(요청에 있는 경우)을 롤백합니다.

Junos OS Evolved 릴리스 23.1R1부터 , 또는 LoadCertificate() 작업 중에 Install()Rotate()gNOI 서버는 해당 CA 인증서를 사용하여 새로운 최종 엔터티 인증서를 확인합니다. 따라서 gNOI 서버의 PKI에는 새 인증서를 확인하는 루트 CA 인증서가 포함되어야 합니다. 필요한 CA 인증서를 gNOI CA 번들의 일부로 로드하거나 별도로 로드할 수 있습니다. 확인에 실패하면 디바이스는 새 인증서를 설치하지 않습니다.

그림 1: gNOI CertificateManagement 서비스 설치 및 회전 작업 gNOI CertificateManagement Service Install and Rotate Operations

gNOI 서버는 gNOI 서비스에 대해 하나의 글로벌 CA 인증서 번들만 지원합니다. gNOI CertificateManagement 서비스를 사용하여 CA 번들을 로드하는 경우 다음 문을 적용할 수 있습니다.

  • gNOI는 항상 예약된 식별자gnoi-ca-bundle를 사용하여 CA 인증서 번들을 로드합니다ca-profile-group.

  • gNOI를 사용하여 CA 인증서 번들을 로드하는 경우, 디바이스가 명시적으로 구성되지 않더라도 디바이스는 암시적으로 상호 인증을 사용하고 다음 구성을 가정합니다.

  • gNOI 서버가 새 CA 인증서 번들을 로드하라는 요청을 수신하면 디바이스에서 이전 CA 번들에 대한 인증서를 지우고 새 인증서를 로드합니다.

  • gNOI를 사용하여 CA 인증서 번들을 로드하고 문 계층도 [edit system services extension-service request-response grpc ssl mutual-authentication] 구성하는 경우, 구성된 문이 우선합니다.

따라서 처음에는 gNOI 서버에서 서버 전용 인증을 설정한 다음 RPC를 Install() 사용하여 CA 인증서를 로드할 수 있습니다. gNOI를 사용하여 초기 CA 인증서 번들을 로드하는 경우 디바이스는 다음 단계를 수행합니다.

  • Junos PKI에 CA 인증서를 추가합니다.
  • 식별자gnoi-ca-bundle를 사용하여 계층 수준에서 [edit security pki] gNOI CA 인증서 번들을 ca-profile-group 자동으로 구성합니다.
  • 서버 전용 인증에서 상호 인증으로 전환합니다.

RPC는 Rotate() 회전 작업 중에 인증 모드 간 전환을 지원하지 않습니다. 따라서, Rotate() 은(는) 작업 중에 디바이스가 서버 전용 인증에서 상호 인증으로 전환되기 때문에 처음으로 gNOI 서버에 CA 인증서 번들을 로드하는 것을 지원하지 않습니다. 인증 모드가 변경되면 네트워크 디바이스는 gRPC 스택을 다시 시작해야 하며 연결이 끊어집니다. 스트림이 끊어지면 클라이언트는 회전 요청을 완료할 수 없으며 디바이스는 요청이 시작되기 전에 Rotate() 있던 인증서로 롤백됩니다.

참고:

계층 수준의 문 [edit system services extension-service request-response grpc ssl]hot-reloading 작업 중에 인증 모드가 변경되지 않은 상태로 유지되는 경우에만 인증서 업데이트 중에 gRPC 세션을 유지합니다. 예를 들어 인증 모드가 서버 전용에서 상호 인증으로 또는 그 반대로 전환되면 클라이언트의 연결이 끊어집니다.

지원되는 RPC

표 1 에는 Junos 디바이스에서 지원되는 서비스 RPC가 요약 CertificateManagement 되어 있습니다.

표 1: 지원되는 cert.proto RPC
릴리스에 도입된 RPC 설명
CanGenerateCSR()

대상 디바이스를 쿼리하여 지정된 키 유형, 키 크기 및 인증서 유형으로 인증서 서명 요청(CSR)을 생성할 수 있는지 확인합니다. 지원되는 값:

  • 키 유형: KT_RSA

  • 키 크기: 1024, 2048, 4096

  • 인증서 유형: CT_X509

gNOI 서버가 특정 키 유형, 키 크기 및 인증서 유형을 지원하는 경우 반환됩니다 True .

진화한 Junos OS 23.1R1

GenerateCSR()

인증서 서명 요청(CSR)을 생성하고 반환합니다.

진화한 Junos OS 22.2R1

GetCertificates()

대상 장치에 로드된 로컬 인증서를 반환합니다.

진화한 Junos OS 22.2R1

Install()

CSR 요청을 생성하고, CSR을 기반으로 인증서를 생성하고, 새 인증서 ID를 사용하여 인증서를 로드하여 대상 디바이스에 새 인증서를 로드합니다.

진화한 Junos OS 22.2R1

LoadCertificate()

CA(인증 기관)에서 서명한 인증서를 대상 장치에 로드합니다.

진화한 Junos OS 22.2R1

LoadCertificateAuthorityBundle()

대상 디바이스에 CA 인증서 번들을 로드합니다.

진화한 Junos OS 22.2R1

RevokeCertificates()

대상 장치에서 지정된 인증서 ID를 가진 인증서를 해지합니다.

진화한 Junos OS 23.1R1

Rotate()

CSR 요청을 생성하고, CSR을 기반으로 인증서를 생성하고, 기존 인증서 ID를 사용하여 인증서를 로드하여 대상 디바이스의 기존 인증서를 교체합니다.

진화한 Junos OS 22.2R1

네트워크 디바이스 구성

Junos 디바이스에서 gNOI 인증서 관리 서비스를 사용하려면 gRPC 확장 서비스에 대한 및 hot-reloading 문을 구성해야 use-pki 합니다. 대부분의 경우 네트워크 디바이스에서 gRPC 서비스를 구성할 때 문을 구성합니다use-pki. hot-reloading 이 문은 세션에 영향을 주는 인증서를 업데이트할 때 gRPC 세션을 유지하는 데 필요합니다.

시작하기 전에:

서비스 작업을 위한 CertificateManagement 네트워크 디바이스 구성 방법:

  1. 로컬 인증서에 PKI 데이터베이스를 사용하도록 디바이스를 구성합니다.
  2. 디바이스가 gRPC 세션을 종료하지 않고 인증서를 다시 로드할 수 있도록 합니다.
  3. 구성을 커밋합니다.

인증서 설치

서비스 Install() RPC를 CertificateManagement 사용하여 대상 디바이스에 새 인증서를 로드할 수 있습니다. 작업을 사용하여 Install() 새 인증서를 설치하는 경우 대상 디바이스에 아직 없는 새 인증서 ID를 지정해야 합니다. 선택적으로 작업의 일부로 CA 인증서 번들을 Install() 로드할 수도 있습니다.

작업의 일부로 Install() 디바이스는 새 인증서를 확인합니다. 따라서 Junos PKI에는 새 인증서를 확인하는 루트 CA 인증서가 있어야 합니다. 필요한 CA 인증서를 작업의 일부로 Install() 로드하거나, PKI에 아직 없는 경우 작업 전에 별도로 로드할 수 있습니다.

gRPC 세션 인증에 사용할 새 로컬 인증서를 설치하는 경우 새 인증서 ID를 사용하도록 디바이스의 gRPC 서버 구성도 업데이트해야 합니다.

예: 인증서 설치

이 예에서 gNOI 서버는 처음에 로컬 인증서로만 구성되었으며 상호 인증을 사용하도록 구성되지 않았습니다. gNOI 클라이언트는 RPC를 Install() 사용하여 디바이스에 새 로컬 인증서 및 CA 인증서 번들을 로드합니다. CA 번들이 gNOI 서버에 로드된 후 서버는 기본적으로 상호 인증을 사용합니다. CA 번들에는 클라이언트 인증서에 대한 루트 CA 인증서와 새 서버 인증서에 대한 루트 CA 인증서가 포함됩니다.

클라이언트는 Python 응용 프로그램을 gnoi_cert_install_certificate_csr.py 실행하여 다음 작업을 수행합니다.

  • 대상에 CSR을 생성하도록 요청합니다.
  • CSR을 기반으로 서명된 인증서를 가져옵니다.
  • 새 서버 인증서, 서버의 새 루트 CA 인증서 및 클라이언트의 루트 CA 인증서를 대상 네트워크 디바이스에 로드합니다.

애플리케이션은 적절한 매개 변수와 함께 메시지를 사용하여 InstallCertificateRequest CSR 생성 및 인증서 로드에 대한 요청을 정의합니다. 각 요청에 대해 애플리케이션은 RPC를 Install() 사용하여 네트워크 디바이스에 요청을 보냅니다.

응용 프로그램은 gnoi_cert_install_certificate_csr.py 채널을 설정하기 위해 모듈을 가져옵니다 grpc_channel . 이 grpc_channel 모듈은 gNOI 서비스 구성에 설명되어 있습니다. 응용 프로그램의 인수는 파일에 저장됩니다 args_cert_install_csr.txt . 응용 프로그램 및 인수 파일이 여기에 표시됩니다.

gnoi_cert_install_certificate_csr.py 파일

args_cert_install_csr.txt

응용 프로그램 실행

클라이언트가 애플리케이션을 실행하면 애플리케이션은 CSR을 요청하고, 서명된 인증서를 가져오고, 대상 네트워크 디바이스에 새 서버 인증서 및 CA 인증서를 로드합니다.

새 서버 인증서를 설치한 후 다음과 같이 gRPC 세션 인증에 해당 인증서 ID를 사용하도록 서버를 구성해야 합니다. 또한 작업이 새 CA 인증서를 로드했기 때문에 Install() 디바이스는 암시적으로 상호 인증을 사용합니다. 따라서 모든 후속 gRPC 세션에는 채널을 설정할 때 클라이언트의 인증서와 키가 포함되어야 합니다.

응용 프로그램을 실행하고 서버에 이미 있는 인증서 ID를 제공하는 경우 작업에 새 인증서 ID가 필요하기 때문에 Install() 응용 프로그램에서 오류를 반환합니다ALREADY_EXISTS.

인증서 교체

서비스 Rotate() RPC를 CertificateManagement 사용하여 대상 디바이스의 기존 인증서를 교체할 수 있습니다. 작업을 사용하여 기존 인증서를 교체하는 경우 대상 디바이스에 이미 있는 인증서 ID를 사용하여 Rotate() 인증서를 로드해야 합니다. 선택적으로 기존 gNOI CA 인증서 번들을 작업의 일부로 교체할 Rotate() 수도 있습니다.

Rotate() 작업은 새 인증서를 설치하는 대신 기존 인증서를 대체한다는 Rotate() 점을 제외하고 작업과 유사합니다Install(). 또한 클라이언트는 업데이트된 인증서가 작동하는지 유효성을 검사한 다음 인증서 유효성 검사의 성공 또는 실패에 따라 요청을 완료하거나 취소해야 Rotate() 합니다.

작업의 일부로 Rotate() 디바이스는 새 인증서를 확인합니다. 따라서 Junos PKI에는 새 인증서를 확인하는 루트 CA 인증서가 있어야 합니다. 필요한 CA 인증서를 작업의 일부로 Rotate() 로드하거나, PKI에 아직 없는 경우 작업 전에 별도로 로드할 수 있습니다.

예: 인증서 교체

이 예제에서 클라이언트는 다음 작업을 수행하는 Python 응용 프로그램을 실행합니다 gnoi_cert_rotate_certificate_csr.py .

  • 대상에 CSR을 생성하도록 요청합니다.
  • CSR을 기반으로 서명된 인증서를 가져옵니다
  • 대상 네트워크 디바이스의 노드 인증서 및 gNOI CA 번들을 교체합니다.
  • 새 인증서의 유효성을 검사합니다.
  • 작업을 마무리합니다 Rotate .

애플리케이션은 적절한 매개 변수와 함께 메시지를 사용하여 RotateCertificateRequest CSR을 생성하고 인증서 및 CA 번들을 로드하기 위한 요청을 정의합니다. 각 요청에 대해 애플리케이션은 RPC를 Rotate() 사용하여 네트워크 디바이스에 요청을 보냅니다. 대상 디바이스가 새 노드 인증서를 확인할 수 있도록 하기 위해 애플리케이션은 기존 CA 번들을 새 CA 번들로 교체합니다. 번들에는 클라이언트 CA 인증서와 노드 인증서를 확인하는 데 필요한 CA 인증서가 모두 포함됩니다.

애플리케이션은 네트워크 디바이스와 함께 새 gRPC 세션을 만들고 간단한 Time() RPC를 실행하여 새 인증서가 작동하는지 확인하지만 모든 RPC를 사용하여 세션 인증을 테스트할 수 있습니다. 애플리케이션은 세션이 성공적으로 설정되면 회전 요청을 완료하고 세션 인증이 실패하면 회전 요청을 취소합니다.

응용 프로그램은 gnoi_cert_rotate_certificate_csr.py 채널을 설정하기 위해 모듈을 가져옵니다 grpc_channel . 이 grpc_channel 모듈은 gNOI 서비스 구성에 설명되어 있습니다. 응용 프로그램의 인수는 파일에 저장됩니다 args_cert_rotate_csr.txt . 응용 프로그램 및 인수 파일이 여기에 표시됩니다.

gnoi_cert_rotate_certificate_csr.py 파일

args_cert_rotate_csr.txt

인수는 root_ca_cert 초기 채널 자격 증명에 필요한 서버의 루트 CA 인증서라는 점에 유의해야 합니다. 인수는 server_root_ca1 서버의 새 인증서에 해당하는 루트 CA 인증서입니다. Junos PKI에는 작업 중에 Rotate() 새 로컬 인증서를 확인하기 위해 새 루트 CA 인증서가 있어야 합니다. 또한 새 인증서의 유효성을 검사하는 gRPC 세션에 대한 채널 자격 증명은 이 루트 CA 인증서를 사용합니다. 이 예에서는 새 서버 인증서와 이전 서버 인증서에 대해 동일한 루트 CA 인증서를 사용하지만 다른 경우에는 다를 수 있습니다.

응용 프로그램 실행

클라이언트가 애플리케이션을 실행하면 애플리케이션은 CSR을 요청하고, 서명된 인증서를 가져오고, 대상 네트워크 디바이스에 교체 인증서와 CA 번들을 로드합니다. 그런 다음 애플리케이션은 간단한 Time() RPC를 실행하는 새 gRPC 세션으로 대체 인증서의 유효성을 검사합니다. 유효성 검사에 성공하면 클라이언트는 교체 요청을 완료합니다.

인증서 해지

gNOI 클라이언트는 RPC를 RevokeCertificates() 사용하여 대상 장치에서 하나 이상의 인증서를 제거할 수 있습니다. 클라이언트는 해지할 인증서 ID 목록이 포함된 메시지를 포함합니다 RevokeCertificatesRequest .

gNOI 서버는 요청을 받으면 RevokeCertificates() 다음과 같이 목록의 각 인증서 ID를 처리합니다.

  • 인증서가 있고 해지에 성공하면 디바이스는 파일 시스템 및 Junos PKI에서 인증서를 제거하고 성공적으로 해지된 인증서 목록에 인증서 ID를 추가합니다.

  • 인증서가 있고 해지에 실패하면 디바이스는 인증서 해지 오류 목록에 인증서 ID와 실패 이유를 포함합니다.

  • 인증서가 없는 경우 디바이스는 해지 작업이 성공한 것으로 간주하고 성공적으로 해지된 인증서 목록에 인증서 ID를 추가합니다.

참고:

요청이 현재 세션에 사용된 인증서를 해지하는 경우 세션은 영향을 받지 않습니다.

요청을 처리한 후 gNOI 서버는 다음을 포함하는 메시지를 반환합니다 RevokeCertificatesResponse .

  • 성공적으로 해지된 인증서 ID 목록입니다.

  • 인증서 ID 및 실패 이유를 포함하는 해지 오류 목록입니다.

예: 인증서 해지

이 예제에서 클라이언트는 서버에서 두 개의 인증서를 해지하는 Python 애플리케이션을 실행합니다 gnoi_cert_revoke_certificates.py . 첫 번째 인증서 ID는 디바이스의 유효한 식별자입니다. 두 번째 인증서 ID는 디바이스에 존재하지 않는 식별자입니다.

응용 프로그램은 적절한 매개 변수와 함께 메시지를 사용하여 RevokeCertificatesRequest 요청을 정의합니다. 애플리케이션은 작업을 수행하기 위해 RPC를 네트워크 디바이스로 보냅니다 RevokeCertificates() .

응용 프로그램은 gnoi_cert_revoke_certificates.py 채널을 설정하기 위해 모듈을 가져옵니다 grpc_channel . 이 grpc_channel 모듈은 gNOI 서비스 구성에 설명되어 있습니다. 응용 프로그램의 인수는 파일에 저장됩니다 args_cert_revoke_certificates.txt . 응용 프로그램 및 인수 파일이 여기에 표시됩니다.

gnoi_cert_revoke_certificates.py 파일

args_cert_revoke_certificates.txt

응용 프로그램 실행

클라이언트가 응용 프로그램을 실행하면 응용 프로그램은 대상 장치에 지정된 인증서를 해지하도록 지시합니다. 디바이스는 성공적으로 해지된 인증서 및 오류 목록을 반환합니다. 디바이스는 유효한 인증서 ID와 현재 디바이스에 존재하지 않는 인증서 ID 모두에 대해 작업이 성공한 것으로 간주합니다.

릴리스 기록 테이블
릴리스
설명
23.1R1-에보
Junos OS Evolved 릴리스 23.1R1부터, Install(), Rotate()LoadCertificate() 작업은 작업의 일부로 새 인증서를 확인합니다.