SSL 인증서 & HTTPS 설정 가이드
도메인 SSL 인증서 self-upload(신규·수정·최종 배포·취소·조회·삭제)와 HTTPS·HTTP2 설정, 도메인 정보 조회를 API로 관리합니다.
개요 & 제공 기능
본 API는 도메인에 대한 SSL 인증서와 HTTPS / HTTP2 설정을 관리하는 기능을 제공합니다. 고객이 직접 발급·보유한 인증서를 업로드(self-upload)하여 Speedy CDN 도메인에 적용할 수 있습니다.
| 분류 | 제공 기능 |
|---|---|
| SSL 인증서 관리 | 신규 등록 사전 배포(Staging) · 수정 사전 배포(Staging) · 최종 배포 · 사전 배포(Staging) 취소 · 배포 이력 조회 · 상세 조회 · 목록 조회 · 삭제 |
| 도메인 HTTPS, HTTP2 설정 ON/OFF | 사전 배포(Staging) · 최종 배포 · 사전 배포(Staging) 취소 · 배포 이력 조회 |
| 도메인 정보 조회 | 상세 조회 · 목록 조회 |
지원 프로토콜 — 모든 데이터는 SSL(HTTPS) 기반 REST(HTTP POST/GET) 로 송·수신합니다. 요청은 API에 따라 multipart/form-data, application/json, URL Query Parameter(GET) 형식을 사용하며, 응답은 application/json 입니다.
인증 방식
모든 요청은 User Portal 계정으로 인증합니다. 계정 ID(id)와 함께 비밀번호(password) 또는 API KEY(cloud_key_value) 중 택1을 보냅니다. form-data 방식은 폼 필드로, JSON 방식은 api_request.common 아래에, GET 방식은 쿼리 파라미터로 넣습니다.
배포 순서 & 검증 가이드
인증서 배포와 도메인 HTTPS·HTTP2 설정은 공통으로 사전 배포(Staging) → 검증 → 최종 배포 절차를 따릅니다.
사전 배포 요청
SSL 인증서 또는 도메인 HTTPS·HTTP2 설정 변경을 Staging에 등록
Staging 서버 반영
실서비스에는 반영되지 않고 Staging 서버에만 적용
Staging 검증
Staging 서버 IP로 직접 요청 + Host Header에 도메인 지정
최종 배포
검증 통과 시 최종 배포 요청 → 운영 서버 반영 완료
- 사전 배포가 성공적으로 등록되어야 최종 배포가 가능합니다.
- 사전 배포가 실패하면 사전 배포 취소 후 재 사전 배포를 진행하고, 검증 완료 후 최종 배포합니다.
- 사전 배포 완료 후에는 Staging 서버 IP로 직접 요청하고 도메인 Host Header를 지정하여 정상 동작을 확인합니다. Staging 서버 IP는 배포 이력 조회 응답의
pv_ip로 확인합니다.
시나리오별 순서
실무에서 자주 사용하는 4가지 배포 시나리오입니다.
| 시나리오 | 순서 |
|---|---|
| 1. 신규 등록 정상 | SSL 신규 사전 배포→SSL 최종 배포→도메인 HTTPS·HTTP2 사전 배포→Staging 검증→도메인 HTTPS·HTTP2 최종 배포 |
| 2. 수정 (도메인 추가) 정상 | SSL 수정 사전 배포(도메인 추가)→SSL 최종 배포→도메인 HTTPS·HTTP2 사전 배포→Staging 검증→도메인 HTTPS·HTTP2 최종 배포 |
| 3. 수정 (인증서 갱신) 정상 | SSL 수정 사전 배포(인증서 갱신)→Staging 검증→SSL 최종 배포
이미 도메인 HTTPS ON 이 적용된 도메인 기준입니다. 사전 배포 시 갱신 인증서가 도메인 Staging 에 반영되며, 검증 후 SSL 최종 배포로 운영 반영이 완료됩니다. |
| 4. 사전 배포 실패 실패 | 사전 배포→실패 확인→Staging 취소→재 사전 배포→재검증→대상 설정 최종 배포
Staging 실패 시에는 취소 후 재배포가 필수이며, 재검증 완료 후 최종 배포를 진행합니다. |
API 목록
| 기능 | METHOD | URL (https://openapi.cloudn.co.kr/cdnservice/…) | 요청 형식 |
|---|---|---|---|
| SSL 인증서 신규 등록 사전 배포 | POST | ssl/staging/deploy | form-data |
| SSL 인증서 수정 사전 배포 | POST | ssl/staging/update | form-data |
| SSL 인증서 최종 배포 | POST | ssl/update | form-data |
| SSL 인증서 사전 배포 취소 | POST | ssl/staging/cancel | form-data |
| SSL 인증서 배포 이력 조회 | POST | ssl/history | JSON |
| SSL 인증서 상세 조회 | POST | ssl/info | JSON |
| SSL 인증서 목록 조회 | POST | ssl/list | JSON |
| SSL 인증서 삭제 | POST | ssl/delete | JSON |
| 도메인 HTTPS·HTTP2 ON/OFF 사전 배포 | POST | domain/staging/https/settings | form-data |
| 도메인 HTTPS·HTTP2 ON/OFF 최종 배포 | POST | domain/https/settings | form-data |
| 도메인 HTTPS·HTTP2 ON/OFF 사전 배포 취소 | POST | domain/staging/https/cancel | form-data |
| 도메인 배포 이력 조회 | POST | domain/config/history | JSON |
| 도메인 상세 조회 | POST/GET | domains/info | POST: JSON / GET: Query |
| 도메인 목록 조회 | POST/GET | domains/list | POST: JSON / GET: Query |
SSL 인증서 신규 등록 사전 배포 (Staging)
신규 인증서를 시스템 DB에 등록하고, domain_list 로 지정한 도메인을 대상으로 Staging 배포를 수행합니다. 사전 배포 및 정상 동작 확인 후 최종 배포할 수 있습니다.
domain_list 를 입력하면 사전 배포까지 한 번에 완료됩니다.예외 경로 —
domain_list 없이 등록하면 인증서는 DB에 '등록 완료' 상태로만 저장되고 사전 배포는 수행되지 않습니다. 이후 사전 배포가 필요하면 SSL 인증서 수정 사전 배포를 호출하세요.- 유효한 인증서 — 서명 검증에 성공한 형식상 유효한 X.509 인증서. Nginx 에 적용 가능한 형식이어야 하며, 일반적으로 Apache 용으로 발급된 인증서도 등록 가능합니다.
- 도메인 일치 — 인증서 Common Name(CN)이
domain_list의 도메인과 일치해야 합니다. CNAME 기준으로 확인하며, CNAME 이 없으면 서비스 URL 기준으로 확인합니다. 와일드카드(*)는 한 단계 하위 도메인만 허용됩니다. - 만료되지 않은 인증서 — 유효 기간(NotAfter)이 현재 시각 이후여야 합니다.
- 암호화된 개인키 — .key 파일이 암호화되어 있으면
ssl_key_password를 함께 입력해야 합니다. - 파일 형식 — 인증서는 .crt 또는 .pem(공개키), 키는 .key 또는 .pem(개인키). 인증서와 개인키는 반드시 분리된 파일이어야 하며, 하나의 .pem 에 함께 들어 있는 형태는 지원하지 않습니다.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| ssl_cert | Y | 인증서 crt 파일 (MultipartFile) | .crt |
| ssl_key | Y | 인증서 key 파일 (MultipartFile) | .key |
| ssl_key_password | 선택 | 개인키(key) 암호 | 암호가 걸려 있을 때 필수 |
| domain_list | 선택 | 인증서를 배포할 도메인 목록 | 다중 입력 시 , (쉼표) 구분 |
| memo | 선택 | 메모 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.ssl_file_name | String | 배포한 인증서 파일명 | crt 파일명, 확장자 제외 |
| api_response.data.domain_list | String | 인증서를 배포한 도메인 목록 | ex) ic.speedykorea.com |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/staging/deploy' \ -F 'id=speedy' -F 'password=********' \ -F 'ssl_cert=@ic.speedykorea.com.crt' \ -F 'ssl_key=@ic.speedykorea.com.key' \ -F 'domain_list=ic.speedykorea.com'
{
"api_response": {
"result_msg": "success",
"data": {
"domain_list": "ic.speedykorea.com",
"ssl_file_name": "ic.speedykorea.com"
},
"result_code": "200"
}
}SSL 인증서 수정 사전 배포 (Staging)
기존 인증서의 도메인 매핑을 추가/삭제하거나, ssl_cert·ssl_key 를 함께 보내 인증서를 갱신합니다. 갱신 시에는 신규 등록과 동일한 조건을 만족해야 합니다. 사전 배포 후 정상 동작을 확인한 뒤 최종 배포를 진행합니다.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| ssl_file_name | Y | 최초 배포 시 등록한 인증서 crt 파일명 | 확장자 없이 파일명만 |
| ssl_cert | 선택 | 인증서 crt 파일 (갱신 시) | .crt |
| ssl_key | 선택 | 인증서 key 파일 (갱신 시) | .key |
| ssl_key_password | 선택 | 개인키(key) 암호 | 암호가 걸려 있을 때 필수 |
| add_domain_list | 선택 | 인증서를 배포할 도메인 목록(추가) | 다중 입력 시 , 구분 |
| del_domain_list | 선택 | 인증서 매핑을 해제할 도메인 목록(삭제) | 다중 입력 시 , 구분 |
| memo | 선택 | 메모 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.ssl_file_name | String | 배포한 인증서 파일명 | ex) ic.speedykorea.com |
| api_response.data.add_domain_list | String | 인증서를 배포한 도메인 목록 | |
| api_response.data.del_domain_list | String | 인증서 매핑을 해제한 도메인 목록 |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/staging/update' \ -F 'id=speedy' -F 'password=********' \ -F 'ssl_file_name=ic.speedykorea.com' \ -F 'add_domain_list=ic.speedykorea.com'
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/staging/update' \ -F 'id=speedy' -F 'password=********' \ -F 'ssl_file_name=ic.speedykorea.com' \ -F 'ssl_cert=@ic.speedykorea.com.crt' \ -F 'ssl_key=@ic.speedykorea.com.key' \ -F 'add_domain_list=ic.speedykorea.com'
{
"api_response": {
"result_msg": "success",
"data": {
"ssl_file_name": "ic.speedykorea.com",
"add_domain_list": "ic.speedykorea.com"
},
"result_code": "200"
}
}SSL 인증서 최종 배포
사전 배포(Staging)한 내용으로 실제 서비스에 최종 배포합니다. 사전 배포를 진행한 인증서에 대해서만 요청할 수 있습니다.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| ssl_file_name | Y | 최초 배포 시 등록한 인증서 crt 파일명 | 확장자 없이 파일명만 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.ssl_file_name | String | 배포한 인증서 파일명 | ex) ic.speedykorea.com |
| api_response.data.add_domain_list | String | 인증서를 배포한 도메인 목록 | |
| api_response.data.del_domain_list | String | 인증서 매핑을 해제한 도메인 목록 |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/update' \ -F 'id=speedy' -F 'password=********' \ -F 'ssl_file_name=ic.speedykorea.com'
{
"api_response": {
"result_msg": "success",
"data": {
"ssl_file_name": "ic.speedykorea.com",
"add_domain_list": "ic.speedykorea.com"
},
"result_code": "200"
}
}SSL 인증서 사전 배포 (Staging) 취소
SSL 인증서 사전 배포(Staging)를 취소합니다. 사전 배포를 다시 시도하려면 기존 사전 배포를 먼저 취소해야 합니다.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| ssl_file_name | Y | 최초 배포 시 등록한 인증서 crt 파일명 | 확장자 없이 파일명만 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/staging/cancel' \ -F 'id=speedy' -F 'password=********' \ -F 'ssl_file_name=ic.speedykorea.com'
{
"api_response": {
"result_msg": "success",
"result_code": "200"
}
}SSL 인증서 배포 이력 조회
사전 배포(Staging) 이력과 최종 배포 이력을 응답합니다. staging_history 가 있으면 사전 배포(Staging) 상태입니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | ssl_file_name | Y | 인증서 파일명 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.deploy_history[] | Array | 최종 배포 이력 | |
| deploy_history[].user_id | String | 배포 실행 ID | |
| deploy_history[].success_rate | String | 성공률 | ex) "100%" |
| deploy_history[].datetime | String | 배포 시각 | |
| api_response.data.staging_history[] | Array | 사전 배포(Staging) 이력 | |
| staging_history[].pv_ip | String | Staging 서버 IP | 검증 시 이 IP로 요청 |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {
"ssl_file_name": "ic.speedykorea.com"
}
}
}{
"api_response": {
"result_msg": "success",
"data": {
"deploy_history": [
{
"user_id": "speedy",
"success_rate": "100%",
"datetime": "2026-07-27 16:30:12",
"cname": "ic.speedykorea.com",
"service_domain": "0"
}
],
"staging_history": [
{
"user_id": "speedy",
"pv_ip": "<STAGING_IP>",
"success_rate": "100%",
"datetime": "2026-07-27 16:25:40",
"cname": "ic.speedykorea.com",
"service_domain": "0"
}
]
},
"result_code": "200"
}
}SSL 인증서 상세 조회
인증서 상세 정보를 조회합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | ssl_file_name | Y | 인증서 파일명 | ex) ic.speedykorea.com |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.ssl_file_name | String | 배포한 인증서 파일명 (crt 파일명) | ex) ic.speedykorea.com |
| api_response.data.domain_list | Array | 인증서에 연결된 도메인 | |
| api_response.data.created_at | String | 생성 시각 (YYYY-MM-DD HH:mm:ss) | |
| api_response.data.valid_from | String | 인증서 유효 시작일 | |
| api_response.data.expires_at | String | 인증서 만료일 | |
| api_response.data.updated_at | String | 생성 또는 마지막 수정 시각 | |
| api_response.data.is_active | String | 인증서 사용 여부 | "Y" / "N" |
| api_response.data.cert_path | String | 인증서 Cert 파일 위치 | |
| api_response.data.key_path | String | 인증서 Key 파일 위치 | |
| api_response.data.memo | String | 인증서 메모 |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {
"ssl_file_name": "ic.speedykorea.com"
}
}
}{
"api_response": {
"result_msg": "success",
"data": {
"ssl_file_name": "ic.speedykorea.com",
"domain_list": [
"ic.speedykorea.com"
],
"created_at": "2026-07-27 16:21:45",
"valid_from": "2026-07-27 16:21:30",
"expires_at": "2026-10-25 16:21:29",
"updated_at": "2026-07-27 16:21:45",
"is_active": "Y",
"cert_path": "ssl/ic.speedykorea.com/ic.speedykorea.com.crt",
"key_path": "ssl/ic.speedykorea.com/ic.speedykorea.com.key",
"memo": ""
},
"result_code": "200"
}
}SSL 인증서 목록 조회
계정에 등록된 인증서 목록을 조회합니다. data 는 빈 객체({})로 보냅니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | (빈 객체) | Y | 조회 조건 없음 | ex) {} |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.total_count | Number | 전체 인증서 수 | |
| ssl_list[].ssl_file_name | String | 배포한 인증서 파일명 (crt 파일명) | ex) ic.speedykorea.com |
| ssl_list[].domain_list | Array | 인증서에 연결된 도메인 | |
| ssl_list[].created_at | String | 생성 시각 (YYYY-MM-DD HH:mm:ss) | |
| ssl_list[].valid_from | String | 인증서 유효 시작일 | |
| ssl_list[].expires_at | String | 인증서 만료일 | |
| ssl_list[].updated_at | String | 생성 또는 마지막 수정 시각 | |
| ssl_list[].is_active | String | 인증서 사용 여부 | "Y" / "N" |
| ssl_list[].cert_path | String | 인증서 Cert 파일 위치 | |
| ssl_list[].key_path | String | 인증서 Key 파일 위치 | |
| ssl_list[].memo | String | 인증서 메모 |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {}
}
}{
"api_response": {
"result_msg": "success",
"data": {
"total_count": 1,
"ssl_list": [
{
"ssl_file_name": "ic.speedykorea.com",
"domain_list": [
"ic.speedykorea.com"
],
"created_at": "2026-07-27 16:21:45",
"valid_from": "2026-07-27 16:21:30",
"expires_at": "2026-10-25 16:21:29",
"updated_at": "2026-07-27 16:21:45",
"is_active": "Y",
"cert_path": "ssl/ic.speedykorea.com/ic.speedykorea.com.crt",
"key_path": "ssl/ic.speedykorea.com/ic.speedykorea.com.key",
"memo": ""
}
]
},
"result_code": "200"
}
}SSL 인증서 삭제
인증서를 삭제합니다. 연결된 도메인이 없는 인증서만 삭제할 수 있습니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | ssl_file_name | Y | 인증서 파일명 | ex) ic.speedykorea.com |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {
"ssl_file_name": "ic.speedykorea.com"
}
}
}{
"api_response": {
"result_msg": "success",
"result_code": "200"
}
}도메인 HTTPS · HTTP2 설정 ON/OFF 사전 배포 (Staging)
도메인의 HTTPS(listen 443;)·HTTP2(http2 on;) 설정 변경을 Staging 서버에만 배포합니다(실서비스 미반영). 사전 배포 후 Staging 서버 IP로 직접 요청하고 Host Header에 대상 도메인을 지정해 정상 동작을 확인하세요.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| domain | Y | 대상 도메인 | ex) ic.speedykorea.com |
| https | Y | HTTPS (listen 443;) 설정 | on / off |
| http2 | Y | HTTP2 (http2 on;) 설정 | on / off |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/domain/staging/https/settings' \ -F 'id=speedy' -F 'password=********' \ -F 'domain=ic.speedykorea.com' \ -F 'https=on' \ -F 'http2=off'
{
"api_response": {
"result_msg": "success",
"result_code": "200"
}
}# Staging IP = domain/config/history 의 config_list[].pv_ip (action_text=pre-deploy)
openssl s_client -connect <STAGING_IP>:443 \
-servername ic.speedykorea.com -tls1_2
curl -kI --resolve ic.speedykorea.com:443:<STAGING_IP> https://ic.speedykorea.com/도메인 HTTPS · HTTP2 설정 ON/OFF 최종 배포
사전 배포(Staging)한 설정을 실제 서비스 서버에 반영합니다. 사전 배포가 성공적으로 등록된 도메인에 대해서만 요청할 수 있습니다.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| domain | Y | 대상 도메인 | ex) ic.speedykorea.com |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/domain/https/settings' \ -F 'id=speedy' -F 'password=********' \ -F 'domain=ic.speedykorea.com'
{
"api_response": {
"result_msg": "success",
"result_code": "200"
}
}도메인 HTTPS · HTTP2 설정 ON/OFF 사전 배포 (Staging) 취소
도메인 HTTPS·HTTP2 설정 변경 사전 배포(Staging)를 취소합니다. 다시 시도하려면 기존 사전 배포를 먼저 취소해야 합니다.
| Parameter | Required | Description | 비고 |
|---|---|---|---|
| id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 |
| cloud_key_value | 택1 | User Portal 계정 API KEY | |
| domain | Y | 대상 도메인 | ex) ic.speedykorea.com |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/domain/staging/https/cancel' \ -F 'id=speedy' -F 'password=********' \ -F 'domain=ic.speedykorea.com'
{
"api_response": {
"result_msg": "success",
"result_code": "200"
}
}도메인 배포 이력 조회
도메인 설정의 사전 배포(Staging) 이력과 최종 배포 이력을 응답합니다. 마지막 이력이 사전 배포(pre-deploy)면 사전 배포(Staging) 상태입니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | domain | Y | 대상 도메인 | |
| per_page | Y | 페이지당 조회 개수 (Integer) | ex) 10 | |
| page | Y | 페이지 번호 (Integer) | ex) 1 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.total_count | String | 전체 config_list 건수 | |
| config_list[].action_text | String | 배포 구분 | pre-deploy / prod-deploy |
| config_list[].pv_ip | String | Staging 서버 IP | 사전 배포 시 |
| config_list[].config_result | String | 배포 결과 | ex) success |
| config_list[].success_rate | String | 성공률 | |
| config_list[].datetime | String | 배포 시각 |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {
"domain": "ic.speedykorea.com",
"per_page": 10,
"page": 1
}
}
}{
"api_response": {
"result_msg": "success",
"data": {
"total_count": "2",
"config_list": [
{
"user_id": "speedy",
"tran_id": "API_20260727164012_xxxxxxxx",
"config_result": "success",
"success_rate": "100.0%",
"action_text": "prod-deploy",
"datetime": "2026-07-27 16:40:12"
},
{
"user_id": "speedy",
"tran_id": "API_20260727163501_xxxxxxxx",
"pv_ip": "<STAGING_IP>",
"config_result": "success",
"success_rate": "100.0%",
"action_text": "pre-deploy",
"datetime": "2026-07-27 16:35:01"
}
]
},
"result_code": "200"
}
}도메인 상세 조회
도메인 상세 정보를 조회합니다. POST(JSON)와 GET(URL Query Parameter) 모두 지원합니다. 인증서 연결 후 https_enabled 가 true 인지 확인하는 데 사용합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | domain | Y | 대상 도메인 | GET 방식은 id·password(또는 cloud_key_value)·domain 을 쿼리로 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.cname | String / Null | 고객 도메인 | |
| api_response.data.domain | String | CDN 서비스 도메인 | |
| api_response.data.service_type | String | 서비스 유형 | download / cache |
| api_response.data.status | String | 도메인 상태 | ex) running |
| api_response.data.origin.protocol | String | 원본 연결 프로토콜 | http / https |
| api_response.data.origin.host | String | 원본 서버 호스트명 | |
| api_response.data.origin.port | Integer | 원본 서버 포트 | |
| api_response.data.https_enabled | Boolean | HTTPS 사용 여부 | |
| api_response.data.updated_at | String | 생성 또는 마지막 수정 시각 |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {
"domain": "ic.speedykorea.com"
}
}
}GET https://openapi.cloudn.co.kr/cdnservice/domains/info?id=speedy&password=********&domain=ic.speedykorea.com
{
"api_response": {
"result_msg": "success",
"data": {
"cname": null,
"domain": "ic.speedykorea.com",
"service_type": "download",
"status": "running",
"origin": {
"protocol": "https",
"host": "origin.example.com",
"port": 443
},
"https_enabled": true,
"updated_at": "2026-07-27 16:40:12"
},
"result_code": "200"
}
}도메인 목록 조회
계정의 도메인 목록을 조회합니다. POST(JSON)와 GET(URL Query Parameter) 모두 지원합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | User Portal 계정 ID | ex) speedy |
| password | 택1 | User Portal 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | User Portal 계정 API KEY | ||
| data | page | Y | 페이지 번호 (Integer) | ex) 1 |
| per_page | Y | 페이지당 조회 개수 (Integer) | ex) 10 | |
| search_key | 선택 | 검색어 |
| Parameter | Type | Description | 비고 |
|---|---|---|---|
| api_response.result_msg | String | 결과 메시지 | ex) success |
| api_response.result_code | String | 결과 코드 | ex) "200" |
| api_response.data.total_count | Number | 전체 건수 | |
| domain_list[].cname | String / Null | 고객 도메인 | |
| domain_list[].domain | String | CDN 서비스 도메인 | |
| domain_list[].service_type | String | 서비스 유형 | download / cache |
| domain_list[].status | String | 도메인 상태 | ex) running |
{
"api_request": {
"common": {
"id": "speedy",
"password": "********"
},
"data": {
"page": 1,
"per_page": 10,
"search_key": "speedykorea"
}
}
}GET https://openapi.cloudn.co.kr/cdnservice/domains/list?id=speedy&password=********&page=1&per_page=10&search_key=speedykorea
{
"api_response": {
"result_msg": "success",
"data": {
"total_count": 1,
"domain_list": [
{
"cname": null,
"domain": "ic.speedykorea.com",
"service_type": "download",
"status": "running"
}
]
},
"result_code": "200"
}
}실전 예제 — Let's Encrypt 인증서 self-upload
도메인 ic.speedykorea.com(download 서비스)에 Let's Encrypt 인증서를 발급해 self-upload하고 HTTPS를 최초로 켠 전체 과정입니다.
LE 인증서 발급
certbot DNS-01
CN=ic.speedykorea.com
SSL 사전배포
ssl/staging/deploy
+ domain_list
SSL 최종배포
ssl/update
HTTPS ON 사전배포
domain/staging/
https/settings
Staging 검증
Host헤더+Staging IP
verify=0(OK)
HTTPS ON 최종배포
https_enabled: true
에러 코드 & 유의사항
| result_code | 의미 | 대응 |
|---|---|---|
| 200 | 성공 | — |
| 401 | 인증 정보 오류 (invalid auth info) | id / password(또는 API KEY) 확인 |
| 403 | 도메인 접근 권한 없음 | 도메인이 속한 계정으로 인증 |
| E500 | SSL mapping not found 등 | 인증서→도메인 매핑(domain_list) 반영 후 재시도 |
- 매핑 반영 지연 — 최종 배포 직후 인증서→도메인 매핑 반영에 수 초가 걸릴 수 있습니다. HTTPS ON 사전배포가 "SSL mapping not found"로 실패하면 잠시 후 재시도하세요.
- 최초 vs 갱신 — 최초 1회는 HTTPS ON(사전→검증→최종)까지 완료해야 도메인과 인증서가 연결됩니다. 이후 갱신은 인증서 배포만으로 반영됩니다.
- 인증서 만료 관리 — Let's Encrypt는 90일 유효. 만료 전 재발급 →
ssl/staging/update(갱신) →ssl/update로 교체합니다.
Speedy CDN OpenAPI Manual · SSL 인증서 & HTTPS 설정 가이드