Management > Private CA > API v2.0 가이드
NHN Cloud Private CA API를 사용하여 인증서를 프로그래밍 방식으로 관리할 수 있습니다.
| 리전 | 엔드포인트 |
|---|---|
| KR1 | https://kr1-pca.api.nhncloudservice.com |
| Method | URI | 설명 |
|---|---|---|
| GET | /v2.0/appkeys/{appkey}/cas/{caId}/certs/{certId}/download | PEM 형식의 인증서를 다운로드합니다. |
| GET | /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl | CRL 정보(PEM, 발행/갱신 시간)를 조회합니다. |
| GET | /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl/der | DER 형식의 CRL을 다운로드합니다. |
| GET | /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl/pem | PEM 형식의 CRL을 다운로드합니다. |
| POST | /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl | CRL을 수동으로 갱신합니다. |
| GET | /v2.0/appkeys/{appkey}/cas/{caId}/ocsp/{ocspRequestBase64} | Base64 인코딩된 OCSP 요청으로 인증서 상태를 조회합니다. |
| POST | /v2.0/appkeys/{appkey}/cas/{caId}/ocsp | DER 형식의 OCSP 요청으로 인증서 상태를 조회합니다. |
모든 API 요청에는 다음과 같은 인증 헤더가 필요합니다.
X-NHN-Authorization: Bearer {access_token}
알아두기
Private CA API는 역할 기반 접근 제어(RBAC)를 사용하며, 다음과 같이 구분됩니다.
Private CA API에서 사용하는 주요 인증서 형식은 다음과 같습니다.
-----BEGIN CERTIFICATE-----로 시작합니다. 사람이 읽을 수 있고 편집이 쉽습니다.발급된 인증서를 PEM 형식으로 다운로드합니다.
GET /v2.0/appkeys/{appkey}/cas/{caId}/certs/{certId}/download
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
| certId | Long | Y | 인증서 ID |
필요 권한
VIEWER 이상Response Headers
application/x-pem-fileattachment; filename={filename}.pemResponse Body
인증서 데이터(PEM 형식)
CRL(certificate revocation list)은 특정 발급자가 발급한 인증서 중 폐기된 인증서의 목록을 제공하는 메커니즘입니다. 클라이언트는 CRL을 다운로드하여 인증서가 폐기되었는지 확인할 수 있습니다.
특정 발급자의 CRL 정보를 조회합니다.
GET /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
| issuerCertId | Long | Y | 발급자 인증서 ID |
필요 권한
VIEWER 이상Response Body
{
"header": {
"resultCode": 0,
"resultMessage": "SUCCESS",
"isSuccessful": true
},
"body": {
"crlPem": "-----BEGIN X509 CRL-----\n...\n-----END X509 CRL-----",
"thisUpdate": "2024-01-01 00:00:00",
"nextUpdate": "2024-01-08 00:00:00"
}
}
| 필드 | 타입 | 설명 |
|---|---|---|
| crlPem | String | CRL PEM 형식 데이터 |
| thisUpdate | LocalDateTime | CRL 발행 시간 |
| nextUpdate | LocalDateTime | 다음 CRL 예정 시간 |
CRL을 DER(바이너리) 형식으로 다운로드합니다.
GET /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl/der
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
| issuerCertId | Long | Y | 발급자 인증서 ID |
필요 권한
Response Headers
application/pkix-crlattachment; filename=crl_{caId}_{certId}.crlResponse Body
CRL 데이터(DER 형식)
CRL을 PEM 형식으로 다운로드합니다.
GET /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl/pem
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
| issuerCertId | Long | Y | 발급자 인증서 ID |
필요 권한
Response Headers
application/pkix-crlattachment; filename=crl_{caId}_{certId}.pemResponse Body
CRL 데이터(PEM 형식)
CRL을 수동으로 갱신합니다.
POST /v2.0/appkeys/{appkey}/cas/{caId}/certs/{issuerCertId}/crl
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
| issuerCertId | Long | Y | 발급자 인증서 ID |
필요 권한
ADMINResponse Body
{
"header": {
"resultCode": 0,
"resultMessage": "SUCCESS",
"isSuccessful": true
},
"body": true
}
OCSP(online certificate status protocol)는 개별 인증서의 폐기 상태를 빠르게 확인할 수 있는 프로토콜입니다. CRL과 달리 전체 목록을 다운로드하지 않고 특정 인증서의 상태만 요청 시점에 조회할 수 있습니다.
Base64로 인코딩된 OCSP 요청을 처리합니다.
GET /v2.0/appkeys/{appkey}/cas/{caId}/ocsp/{ocspRequestBase64}
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
| ocspRequestBase64 | String | Y | Base64로 인코딩된 OCSP 요청 |
주의
OCSP 요청을 Base64로 인코딩할 때는 URL-safe 형태로 변환해야 합니다.
+ → -(plus를 hyphen으로)/ → _(slash를 underscore로)=)는 제거합니다.MEow/SDAwL+oGCC+sGAQUF/BzAh==MEow_SDAwL-oGCC-sGAQUF_BzAh(+ → -, / → _, = 제거)필요 권한
요청 예시
# OCSP 요청 생성 및 Base64 인코딩
OCSP_REQUEST=$(openssl ocsp -issuer ca.pem -cert cert.pem -reqout - | base64 -w 0)
# URL 인코딩된 요청 전송
curl -X GET "https://kr1-pca.api.nhncloudservice.com/v2.0/appkeys/my-appkey/cas/1/ocsp/${OCSP_REQUEST}"
Response Headers
application/ocsp-responseResponse Body
OCSP 응답(DER 형식)
DER 형식의 OCSP 요청을 처리합니다.
POST /v2.0/appkeys/{appkey}/cas/{caId}/ocsp
Path Parameters
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| appkey | String | Y | 앱키 |
| caId | Long | Y | 저장소 ID |
필요 권한
Request Headers
application/ocsp-requestRequest Body
OCSP 요청(DER 형식)
요청 예시
# OCSP 요청 생성
openssl ocsp -issuer ca.pem -cert cert.pem -reqout ocsp-request.der
# OCSP 요청 전송
curl -X POST "https://kr1-pca.api.nhncloudservice.com/v2.0/appkeys/my-appkey/cas/1/ocsp" \
-H "Content-Type: application/ocsp-request" \
--data-binary @ocsp-request.der \
-o ocsp-response.der
# OCSP 응답 확인
openssl ocsp -respin ocsp-response.der -text
Response Headers
application/ocsp-responseResponse Body
OCSP 응답(DER 형식)
crlRefreshPeriod)를 확인하고 조정합니다.주의