SSL 인증서 & HTTPS 설정 가이드
도메인 SSL 인증서 self-upload(신규·수정·최종 배포)와 HTTPS·HTTP2 설정을 API로 관리합니다.
개요 & 지원 프로토콜
본 API는 도메인에 대한 SSL 인증서 관리와 HTTPS / HTTP2 설정을 제공합니다. 고객이 직접 발급·보유한 인증서를 업로드(self-upload)하여 Speedy CDN 도메인에 적용할 수 있습니다. 모든 통신은 SSL(HTTPS) 기반 REST(HTTP POST/GET)이며, 응답은 application/json입니다.
인증 방식
모든 요청은 User Portal 계정으로 인증합니다. 비밀번호(password) 또는 API KEY(cloud_key_value) 중 택1로 인증하며, form-data 방식은 폼 필드로, JSON 방식은 api_request.common 아래에 넣습니다.
공통 배포 흐름
인증서 배포와 도메인 HTTPS 설정은 공통으로 사전 배포(Staging) → 검증 → 최종 배포 절차를 따릅니다.
사전 배포
Staging 서버에만 반영 (실서비스 미반영)
Staging 검증
Staging IP로 직접 요청 + Host Header 지정해 동작 확인
최종 배포
검증 통과분을 실서비스에 반영
운영 반영 완료
운영 엣지에 적용
API 목록
| 기능 | METHOD | URL (…/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/info · ssl/list · ssl/history · ssl/delete | JSON |
| HTTPS·HTTP2 ON 사전배포 | POST | domain/staging/https/settings | form-data |
| HTTPS·HTTP2 ON 최종배포 | POST | domain/https/settings | form-data |
| HTTPS 사전배포 취소 / 이력 / 상세 / 목록 | POST/GET | domain/staging/https/cancel · domain/config/history · domains/info · domains/list | form-data / JSON |
SSL 인증서 신규 등록 사전배포 (Staging)
인증서를 시스템 DB에 등록하고 연결 도메인 대상으로 Staging 배포합니다. 인증서(.crt)와 개인키(.key)는 분리된 파일로 업로드하며(합본 .pem 미지원), CN이 대상 도메인과 일치해야 합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | 계정 ID | ex) speedy |
| password | 택1 | 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | 계정 API KEY | ||
| data | ssl_cert | Y | 인증서 crt 파일 (MultipartFile) | .crt |
| ssl_key | Y | 인증서 key 파일 (MultipartFile) | .key | |
| ssl_key_password | 선택 | 개인키 암호 | 암호화 시 필수 | |
| domain_list | 선택 | 배포 도메인 목록 | 다중 시 , 구분 | |
| memo | 선택 | 메모 |
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": {
"ssl_file_name": "ic.speedykorea.com",
"domain_list": "ic.speedykorea.com"
},
"result_code": "200"
}
}SSL 인증서 수정 사전배포 (Staging)
기존 인증서를 갱신하거나 도메인 매핑을 추가/삭제합니다. 인증서 갱신 시 신규 배포와 동일 요건을 만족해야 합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | 계정 ID | ex) speedy |
| password | 택1 | 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | 계정 API KEY | ||
| data | ssl_file_name | Y | 최초 배포 시 등록한 인증서 파일명 | 확장자 없이 |
| ssl_cert / ssl_key | 선택 | 갱신 시 새 crt/key | ||
| ssl_key_password | 선택 | 개인키 암호 | ||
| add_domain_list | 선택 | 매핑 추가 도메인 | 다중 , 구분 | |
| del_domain_list | 선택 | 매핑 해제 도메인 | 다중 , 구분 | |
| memo | 선택 | 메모 |
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'
{
"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 | 비고 |
|---|---|---|---|---|
| common | id | Y | 계정 ID | ex) speedy |
| password | 택1 | 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | 계정 API KEY | ||
| data | ssl_file_name | Y | 인증서 파일명 | 확장자 없이 |
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" },
"result_code": "200"
}
}SSL 상세 조회
인증서 상세 정보를 조회합니다. 목록은 ssl/list(data:{}), 이력은 ssl/history, 삭제는 ssl/delete(연결 도메인 없는 인증서만)를 동일 JSON 형식으로 호출합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | 계정 ID | ex) speedy |
| password | 택1 | 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | 계정 API KEY | ||
| data | ssl_file_name | Y | 인증서 파일명 |
{
"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"],
"valid_from": "2026-07-27 16:21:30",
"expires_at": "2026-10-25 16:21:29",
"is_active": "Y",
"cert_path": "ssl/ic.speedykorea.com/ic.speedykorea.com.crt",
"key_path": "ssl/ic.speedykorea.com/ic.speedykorea.com.key"
},
"result_code": "200"
}
}도메인 HTTPS · HTTP2 ON 사전배포 (Staging)
HTTPS(listen 443)·HTTP2 설정을 Staging에 반영합니다. 사전 배포 후 Staging 서버 IP로 직접 요청하고 Host Header에 도메인을 지정해 검증합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | 계정 ID | ex) speedy |
| password | 택1 | 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | 계정 API KEY | ||
| data | domain | Y | 대상 도메인 | ex) ic.speedykorea.com |
| https | Y | HTTPS 설정 | on / off | |
| http2 | Y | HTTP2 설정 | on / off |
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=on'
{
"api_response": { "result_msg": "success", "result_code": "200" }
}# config_list[].pv_ip (action_text=pre-deploy) openssl s_client -connect <STAGING_IP>:443 \ -servername ic.speedykorea.com -tls1_2 # subject=CN=ic.speedykorea.com # Verify return code: 0 (ok)
도메인 HTTPS · HTTP2 ON 최종 배포
사전 배포(Staging)한 설정을 실제 서비스에 반영합니다.
| 구분 | Parameter | Required | Description | 비고 |
|---|---|---|---|---|
| common | id | Y | 계정 ID | ex) speedy |
| password | 택1 | 계정 비밀번호 | password 또는 cloud_key_value 중 1개 필수 | |
| cloud_key_value | 택1 | 계정 API KEY | ||
| data | domain | Y | 대상 도메인 |
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" }
}실전 예제 — 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 설정 가이드