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 입니다.

BASE URL  ·  https://openapi.cloudn.co.kr/cdnservice/{Method Name}

인증 방식

모든 요청은 User Portal 계정으로 인증합니다. 계정 ID(id)와 함께 비밀번호(password) 또는 API KEY(cloud_key_value) 중 택1을 보냅니다. form-data 방식은 폼 필드로, JSON 방식은 api_request.common 아래에, GET 방식은 쿼리 파라미터로 넣습니다.

배포 순서 & 검증 가이드

인증서 배포와 도메인 HTTPS·HTTP2 설정은 공통으로 사전 배포(Staging) → 검증 → 최종 배포 절차를 따릅니다.

1

사전 배포 요청

SSL 인증서 또는 도메인 HTTPS·HTTP2 설정 변경을 Staging에 등록

2

Staging 서버 반영

실서비스에는 반영되지 않고 Staging 서버에만 적용

3

Staging 검증

Staging 서버 IP로 직접 요청 + Host Header에 도메인 지정

✓

최종 배포

검증 통과 시 최종 배포 요청 → 운영 서버 반영 완료

  • 사전 배포가 성공적으로 등록되어야 최종 배포가 가능합니다.
  • 사전 배포가 실패하면 사전 배포 취소 후 재 사전 배포를 진행하고, 검증 완료 후 최종 배포합니다.
  • 사전 배포 완료 후에는 Staging 서버 IP로 직접 요청하고 도메인 Host Header를 지정하여 정상 동작을 확인합니다. Staging 서버 IP는 배포 이력 조회 응답의 pv_ip 로 확인합니다.
⚠️ 최초 적용 시 필수 순서: 인증서 배포 후 도메인 HTTPS ON — 도메인에 인증서를 처음 연결할 때는 아래 순서를 반드시 지킵니다.
SSL 인증서 배포 완료(최종 배포까지)→ 도메인 HTTPS ON 사전 배포→ Staging 검증→ 도메인 HTTPS ON 최종 배포→ 연결 완료
최초 1회 연결 이후(이미 도메인 HTTPS ON 이 적용된 도메인)에는 도메인 설정이 인증서를 참조하고 있으므로 인증서 배포(사전/최종)만으로 갱신됩니다.
실패 시 재시도 경로   사전 배포 취소→재 사전 배포→재검증→최종 배포 요청

시나리오별 순서

실무에서 자주 사용하는 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 목록

기능METHODURL (https://openapi.cloudn.co.kr/cdnservice/…)요청 형식
SSL 인증서 신규 등록 사전 배포POSTssl/staging/deployform-data
SSL 인증서 수정 사전 배포POSTssl/staging/updateform-data
SSL 인증서 최종 배포POSTssl/updateform-data
SSL 인증서 사전 배포 취소POSTssl/staging/cancelform-data
SSL 인증서 배포 이력 조회POSTssl/historyJSON
SSL 인증서 상세 조회POSTssl/infoJSON
SSL 인증서 목록 조회POSTssl/listJSON
SSL 인증서 삭제POSTssl/deleteJSON
도메인 HTTPS·HTTP2 ON/OFF 사전 배포POSTdomain/staging/https/settingsform-data
도메인 HTTPS·HTTP2 ON/OFF 최종 배포POSTdomain/https/settingsform-data
도메인 HTTPS·HTTP2 ON/OFF 사전 배포 취소POSTdomain/staging/https/cancelform-data
도메인 배포 이력 조회POSTdomain/config/historyJSON
도메인 상세 조회POST/GETdomains/infoPOST: JSON / GET: Query
도메인 목록 조회POST/GETdomains/listPOST: JSON / GET: Query
POST

SSL 인증서 신규 등록 사전 배포 (Staging)

🔷 form-data
https://openapi.cloudn.co.kr/cdnservice/ssl/staging/deploy

신규 인증서를 시스템 DB에 등록하고, domain_list 로 지정한 도메인을 대상으로 Staging 배포를 수행합니다. 사전 배포 및 정상 동작 확인 후 최종 배포할 수 있습니다.

API 호출→SSL 인증서 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 에 함께 들어 있는 형태는 지원하지 않습니다.
요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
ssl_certY인증서 crt 파일 (MultipartFile).crt
ssl_keyY인증서 key 파일 (MultipartFile).key
ssl_key_password선택개인키(key) 암호암호가 걸려 있을 때 필수
domain_list선택인증서를 배포할 도메인 목록다중 입력 시 , (쉼표) 구분
memo선택메모
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.ssl_file_nameString배포한 인증서 파일명crt 파일명, 확장자 제외
api_response.data.domain_listString인증서를 배포한 도메인 목록ex) ic.speedykorea.com
Request · curl
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'
Response
{
  "api_response": {
    "result_msg": "success",
    "data": {
      "domain_list": "ic.speedykorea.com",
      "ssl_file_name": "ic.speedykorea.com"
    },
    "result_code": "200"
  }
}
POST

SSL 인증서 수정 사전 배포 (Staging)

🔷 form-data
https://openapi.cloudn.co.kr/cdnservice/ssl/staging/update

기존 인증서의 도메인 매핑을 추가/삭제하거나, ssl_cert·ssl_key 를 함께 보내 인증서를 갱신합니다. 갱신 시에는 신규 등록과 동일한 조건을 만족해야 합니다. 사전 배포 후 정상 동작을 확인한 뒤 최종 배포를 진행합니다.

⚠️ 도메인이 연결되지 않은 인증서 — 도메인 추가 없이 인증서만 교체하는 요청은 지원되지 않습니다. 필요하면 SSL 인증서 삭제 후 신규 등록 절차를 진행하세요.
요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
ssl_file_nameY최초 배포 시 등록한 인증서 crt 파일명확장자 없이 파일명만
ssl_cert선택인증서 crt 파일 (갱신 시).crt
ssl_key선택인증서 key 파일 (갱신 시).key
ssl_key_password선택개인키(key) 암호암호가 걸려 있을 때 필수
add_domain_list선택인증서를 배포할 도메인 목록(추가)다중 입력 시 , 구분
del_domain_list선택인증서 매핑을 해제할 도메인 목록(삭제)다중 입력 시 , 구분
memo선택메모
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.ssl_file_nameString배포한 인증서 파일명ex) ic.speedykorea.com
api_response.data.add_domain_listString인증서를 배포한 도메인 목록
api_response.data.del_domain_listString인증서 매핑을 해제한 도메인 목록
Request · curl (도메인만 추가)
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'
Request · curl (인증서 갱신 + 도메인 추가)
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'
Response
{
  "api_response": {
    "result_msg": "success",
    "data": {
      "ssl_file_name": "ic.speedykorea.com",
      "add_domain_list": "ic.speedykorea.com"
    },
    "result_code": "200"
  }
}
POST

SSL 인증서 최종 배포

🔷 form-data
https://openapi.cloudn.co.kr/cdnservice/ssl/update

사전 배포(Staging)한 내용으로 실제 서비스에 최종 배포합니다. 사전 배포를 진행한 인증서에 대해서만 요청할 수 있습니다.

⚠️ 사전 배포가 Staging 서버에 성공적으로 등록된 경우에만 최종 배포를 진행하세요. 사전 배포가 실패하면 사전 배포 취소 → 재 사전 배포 → 검증 후 최종 배포합니다.
요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
ssl_file_nameY최초 배포 시 등록한 인증서 crt 파일명확장자 없이 파일명만
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.ssl_file_nameString배포한 인증서 파일명ex) ic.speedykorea.com
api_response.data.add_domain_listString인증서를 배포한 도메인 목록
api_response.data.del_domain_listString인증서 매핑을 해제한 도메인 목록
Request · curl
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/update' \
  -F 'id=speedy' -F 'password=********' \
  -F 'ssl_file_name=ic.speedykorea.com'
Response
{
  "api_response": {
    "result_msg": "success",
    "data": {
      "ssl_file_name": "ic.speedykorea.com",
      "add_domain_list": "ic.speedykorea.com"
    },
    "result_code": "200"
  }
}
POST

SSL 인증서 사전 배포 (Staging) 취소

🔷 form-data
https://openapi.cloudn.co.kr/cdnservice/ssl/staging/cancel

SSL 인증서 사전 배포(Staging)를 취소합니다. 사전 배포를 다시 시도하려면 기존 사전 배포를 먼저 취소해야 합니다.

요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
ssl_file_nameY최초 배포 시 등록한 인증서 crt 파일명확장자 없이 파일명만
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
Request · curl
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/ssl/staging/cancel' \
  -F 'id=speedy' -F 'password=********' \
  -F 'ssl_file_name=ic.speedykorea.com'
Response
{
  "api_response": {
    "result_msg": "success",
    "result_code": "200"
  }
}
POST

SSL 인증서 배포 이력 조회

🔷 JSON
https://openapi.cloudn.co.kr/cdnservice/ssl/history

사전 배포(Staging) 이력과 최종 배포 이력을 응답합니다. staging_history 가 있으면 사전 배포(Staging) 상태입니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
datassl_file_nameY인증서 파일명
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.deploy_history[]Array최종 배포 이력
deploy_history[].user_idString배포 실행 ID
deploy_history[].success_rateString성공률ex) "100%"
deploy_history[].datetimeString배포 시각
api_response.data.staging_history[]Array사전 배포(Staging) 이력
staging_history[].pv_ipStringStaging 서버 IP검증 시 이 IP로 요청
Request · JSON
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {
      "ssl_file_name": "ic.speedykorea.com"
    }
  }
}
Response
{
  "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"
  }
}
POST

SSL 인증서 상세 조회

🔷 JSON
https://openapi.cloudn.co.kr/cdnservice/ssl/info

인증서 상세 정보를 조회합니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
datassl_file_nameY인증서 파일명ex) ic.speedykorea.com
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.ssl_file_nameString배포한 인증서 파일명 (crt 파일명)ex) ic.speedykorea.com
api_response.data.domain_listArray인증서에 연결된 도메인
api_response.data.created_atString생성 시각 (YYYY-MM-DD HH:mm:ss)
api_response.data.valid_fromString인증서 유효 시작일
api_response.data.expires_atString인증서 만료일
api_response.data.updated_atString생성 또는 마지막 수정 시각
api_response.data.is_activeString인증서 사용 여부"Y" / "N"
api_response.data.cert_pathString인증서 Cert 파일 위치
api_response.data.key_pathString인증서 Key 파일 위치
api_response.data.memoString인증서 메모
Request · JSON
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {
      "ssl_file_name": "ic.speedykorea.com"
    }
  }
}
Response
{
  "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"
  }
}
POST

SSL 인증서 목록 조회

🔷 JSON
https://openapi.cloudn.co.kr/cdnservice/ssl/list

계정에 등록된 인증서 목록을 조회합니다. data 는 빈 객체({})로 보냅니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
data(빈 객체)Y조회 조건 없음ex) {}
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.total_countNumber전체 인증서 수
ssl_list[].ssl_file_nameString배포한 인증서 파일명 (crt 파일명)ex) ic.speedykorea.com
ssl_list[].domain_listArray인증서에 연결된 도메인
ssl_list[].created_atString생성 시각 (YYYY-MM-DD HH:mm:ss)
ssl_list[].valid_fromString인증서 유효 시작일
ssl_list[].expires_atString인증서 만료일
ssl_list[].updated_atString생성 또는 마지막 수정 시각
ssl_list[].is_activeString인증서 사용 여부"Y" / "N"
ssl_list[].cert_pathString인증서 Cert 파일 위치
ssl_list[].key_pathString인증서 Key 파일 위치
ssl_list[].memoString인증서 메모
Request · JSON
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {}
  }
}
Response
{
  "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"
  }
}
POST

SSL 인증서 삭제

🔷 JSON
https://openapi.cloudn.co.kr/cdnservice/ssl/delete

인증서를 삭제합니다. 연결된 도메인이 없는 인증서만 삭제할 수 있습니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
datassl_file_nameY인증서 파일명ex) ic.speedykorea.com
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
Request · JSON
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {
      "ssl_file_name": "ic.speedykorea.com"
    }
  }
}
Response
{
  "api_response": {
    "result_msg": "success",
    "result_code": "200"
  }
}
POST

도메인 HTTPS · HTTP2 설정 ON/OFF 사전 배포 (Staging)

🔶 form-data
https://openapi.cloudn.co.kr/cdnservice/domain/staging/https/settings

도메인의 HTTPS(listen 443;)·HTTP2(http2 on;) 설정 변경을 Staging 서버에만 배포합니다(실서비스 미반영). 사전 배포 후 Staging 서버 IP로 직접 요청하고 Host Header에 대상 도메인을 지정해 정상 동작을 확인하세요.

⚠️ 최초 적용 시 필수 — 도메인에 인증서를 처음 적용할 때는 인증서 배포 이후 도메인 HTTPS ON 을 사전 배포 → 검증 → 최종 배포 순서로 1회 완료해야 실제 도메인 설정에 인증서가 연결됩니다.
요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
domainY대상 도메인ex) ic.speedykorea.com
httpsYHTTPS (listen 443;) 설정on / off
http2YHTTP2 (http2 on;) 설정on / off
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
Request · curl
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'
Response
{
  "api_response": {
    "result_msg": "success",
    "result_code": "200"
  }
}
검증 · Staging IP 확인 후 직접 요청
# 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/
POST

도메인 HTTPS · HTTP2 설정 ON/OFF 최종 배포

🔶 form-data
https://openapi.cloudn.co.kr/cdnservice/domain/https/settings

사전 배포(Staging)한 설정을 실제 서비스 서버에 반영합니다. 사전 배포가 성공적으로 등록된 도메인에 대해서만 요청할 수 있습니다.

사전 배포로 테스트를 완료한 뒤 최종 배포하세요. 사전 배포가 실패하면 사전 배포 취소 → 재 사전 배포 → 검증 후 최종 배포합니다.
요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
domainY대상 도메인ex) ic.speedykorea.com
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
Request · curl
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/domain/https/settings' \
  -F 'id=speedy' -F 'password=********' \
  -F 'domain=ic.speedykorea.com'
Response
{
  "api_response": {
    "result_msg": "success",
    "result_code": "200"
  }
}
POST

도메인 HTTPS · HTTP2 설정 ON/OFF 사전 배포 (Staging) 취소

🔶 form-data
https://openapi.cloudn.co.kr/cdnservice/domain/staging/https/cancel

도메인 HTTPS·HTTP2 설정 변경 사전 배포(Staging)를 취소합니다. 다시 시도하려면 기존 사전 배포를 먼저 취소해야 합니다.

요청 파라미터
ParameterRequiredDescription비고
idYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
domainY대상 도메인ex) ic.speedykorea.com
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
Request · curl
curl -X POST 'https://openapi.cloudn.co.kr/cdnservice/domain/staging/https/cancel' \
  -F 'id=speedy' -F 'password=********' \
  -F 'domain=ic.speedykorea.com'
Response
{
  "api_response": {
    "result_msg": "success",
    "result_code": "200"
  }
}
POST

도메인 배포 이력 조회

🔶 JSON
https://openapi.cloudn.co.kr/cdnservice/domain/config/history

도메인 설정의 사전 배포(Staging) 이력과 최종 배포 이력을 응답합니다. 마지막 이력이 사전 배포(pre-deploy)면 사전 배포(Staging) 상태입니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
datadomainY대상 도메인
per_pageY페이지당 조회 개수 (Integer)ex) 10
pageY페이지 번호 (Integer)ex) 1
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.total_countString전체 config_list 건수
config_list[].action_textString배포 구분pre-deploy / prod-deploy
config_list[].pv_ipStringStaging 서버 IP사전 배포 시
config_list[].config_resultString배포 결과ex) success
config_list[].success_rateString성공률
config_list[].datetimeString배포 시각
Request · JSON
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {
      "domain": "ic.speedykorea.com",
      "per_page": 10,
      "page": 1
    }
  }
}
Response
{
  "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"
  }
}
POSTGET

도메인 상세 조회

🔶 POST: JSON / GET: URL Query Parameter
https://openapi.cloudn.co.kr/cdnservice/domains/info

도메인 상세 정보를 조회합니다. POST(JSON)와 GET(URL Query Parameter) 모두 지원합니다. 인증서 연결 후 https_enabled 가 true 인지 확인하는 데 사용합니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
datadomainY대상 도메인GET 방식은 id·password(또는 cloud_key_value)·domain 을 쿼리로
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.cnameString / Null고객 도메인
api_response.data.domainStringCDN 서비스 도메인
api_response.data.service_typeString서비스 유형download / cache
api_response.data.statusString도메인 상태ex) running
api_response.data.origin.protocolString원본 연결 프로토콜http / https
api_response.data.origin.hostString원본 서버 호스트명
api_response.data.origin.portInteger원본 서버 포트
api_response.data.https_enabledBooleanHTTPS 사용 여부
api_response.data.updated_atString생성 또는 마지막 수정 시각
Request · JSON (POST)
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {
      "domain": "ic.speedykorea.com"
    }
  }
}
Request · GET
GET https://openapi.cloudn.co.kr/cdnservice/domains/info?id=speedy&password=********&domain=ic.speedykorea.com
Response
{
  "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"
  }
}
POSTGET

도메인 목록 조회

🔶 POST: JSON / GET: URL Query Parameter
https://openapi.cloudn.co.kr/cdnservice/domains/list

계정의 도메인 목록을 조회합니다. POST(JSON)와 GET(URL Query Parameter) 모두 지원합니다.

요청 파라미터
구분ParameterRequiredDescription비고
commonidYUser Portal 계정 IDex) speedy
password택1User Portal 계정 비밀번호password 또는 cloud_key_value 중 1개 필수
cloud_key_value택1User Portal 계정 API KEY
datapageY페이지 번호 (Integer)ex) 1
per_pageY페이지당 조회 개수 (Integer)ex) 10
search_key선택검색어
응답
ParameterTypeDescription비고
api_response.result_msgString결과 메시지ex) success
api_response.result_codeString결과 코드ex) "200"
api_response.data.total_countNumber전체 건수
domain_list[].cnameString / Null고객 도메인
domain_list[].domainStringCDN 서비스 도메인
domain_list[].service_typeString서비스 유형download / cache
domain_list[].statusString도메인 상태ex) running
Request · JSON (POST)
{
  "api_request": {
    "common": {
      "id": "speedy",
      "password": "********"
    },
    "data": {
      "page": 1,
      "per_page": 10,
      "search_key": "speedykorea"
    }
  }
}
Request · GET
GET https://openapi.cloudn.co.kr/cdnservice/domains/list?id=speedy&password=********&page=1&per_page=10&search_key=speedykorea
Response
{
  "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를 최초로 켠 전체 과정입니다.

1

LE 인증서 발급

certbot DNS-01
CN=ic.speedykorea.com

2

SSL 사전배포

ssl/staging/deploy
+ domain_list

3

SSL 최종배포

ssl/update

4

HTTPS ON 사전배포

domain/staging/
https/settings

5

Staging 검증

Host헤더+Staging IP
verify=0(OK)

6

HTTPS ON 최종배포

https_enabled: true

① 인증서 발급 (certbot DNS-01)

TXT 레코드 _acme-challenge.ic.speedykorea.com에 검증값을 등록하면 발급됩니다. 발급물 fullchain.pem→.crt, privkey.pem→.key로 분리해 업로드합니다(RSA 2048 권장).

결과 확인

domains/info의 https_enabled가 true로 전환되고, 운영 엣지 TLS 핸드셰이크에서 인증서 체인 검증이 통과(Verify return code: 0)하면 완료입니다.

✅ 검증 완료 — 운영 엣지 전 노드 정상 인증서 서빙, 체인 검증 OK, HTTPS 종단 정상.
① 발급
# DNS-01, RSA 2048
certbot certonly --manual \
  --preferred-challenges dns \
  -d ic.speedykorea.com \
  --key-type rsa --rsa-key-size 2048
②~⑥ 배포 & 검증
# ② SSL 사전배포
POST /ssl/staging/deploy       -> 200
# ③ SSL 최종배포
POST /ssl/update               -> 200
# ④ HTTPS ON 사전배포
POST /domain/staging/https/settings
     https=on http2=on         -> 200
# ⑤ Staging 검증 (TLS 1.2)
openssl s_client -connect <IP>:443 \
  -servername ic.speedykorea.com -tls1_2
  # CN=ic.speedykorea.com / verify=0
# ⑥ HTTPS ON 최종배포
POST /domain/https/settings    -> 200
⚠️ TLS 버전 — CDN 엣지는 TLS 1.2까지 지원(1.3 미지원). 구형 클라이언트(예: macOS 기본 LibreSSL)가 1.3 우선 협상 시 alert이 날 수 있으므로 TLS 1.2로 검증하세요.

에러 코드 & 유의사항

result_code의미대응
200성공—
401인증 정보 오류 (invalid auth info)id / password(또는 API KEY) 확인
403도메인 접근 권한 없음도메인이 속한 계정으로 인증
E500SSL 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 설정 가이드