개발자 참고자료

SSL 인증서 API 문서

SSL 인증서 API 문서: 인증서 투명성 로그를 쿼리하여 도메인에 대해 발급된 모든 SSL/TLS 인증서를 발견합니다. 하위 도메인 발견, 보안 감시, 무단 인증서 발급 모니터링에 유용합니다. 데이터는 crt.sh에서 제공됩니다.

SSL 인증서

인증서 투명성 로그를 쿼리하여 도메인에 대해 발급된 모든 SSL/TLS 인증서를 발견합니다. 하위 도메인 발견, 보안 감시, 무단 인증서 발급 모니터링에 유용합니다. 데이터는 crt.sh에서 제공됩니다.

GET /v1/certificates

쿼리 매개변수

매개변수유형설명
domain 필수 string 인증서를 검색할 도메인 (예: "github.com")
include_subdomains 선택 사항 boolean 와일드카드 및 하위 도메인 인증서 포함 (기본값: true)

사용 사례

  • 인증서 SAN 필드를 통한 하위 도메인 열거
  • 무단 인증서 발급 감지
  • 피싱 인증서 모니터링
  • 인증서 만료 날짜 감시

예제 요청

curl "https://domscan.net/v1/certificates?domain=github.com&include_subdomains=true"
import requests

response = requests.get(
    "https://domscan.net/v1/certificates",
    params={"domain": "github.com", "include_subdomains": "true"}
)
data = response.json()

# Extract unique subdomains from certificates
subdomains = set()
for cert in data['certificates']:
    for name in cert.get('names', []):
        if name.endswith('.github.com'):
            subdomains.add(name)

print(f"Found {len(subdomains)} subdomains")
for subdomain in sorted(subdomains)[:10]:
    print(f"  {subdomain}")

예제 응답

{
  "domain": "github.com",
  "certificates": [
                {
                "issuer": "Let's Encrypt",
                "common_name": "example.com",
                "san": ["example.com", "www.example.com"],
                "not_before": "2024-01-01T00:00:00Z",
                "not_after": "2024-04-01T00:00:00Z"
                }
                ],
                "total": 1
                }

응답 필드

필드 유형
domain string
certificates[] object[]
certificates[] object
certificates[].issuer string
certificates[].common_name string
certificates[].not_before string
certificates[].not_after string
certificates[].serial_number string
certificates[].entry_timestamp string
total integer
GET /v1/ssl/audit

쿼리 매개변수

매개변수 유형 필수
domain string 필수

응답 필드

필드 유형
domain string
audit_completeness string
probe_coverage object
probe_coverage.tls_inspect boolean
probe_coverage.tls_audit boolean
probe_coverage.tls_posture boolean
probe_coverage.revocation boolean
probe_coverage.hsts boolean
probe_coverage.http_versions boolean
certificate object
certificate.subject string
certificate.issuer string
certificate.issuer_org string
certificate.valid_from string
certificate.valid_until string
certificate.days_remaining integer
certificate.expired boolean
certificate.san[] string[]
certificate.key_type string
certificate.key_size integer
certificate.signature_algorithm string
certificate.serial_number string
certificate.fingerprint_sha256 string
certificate.hostname_match boolean | null
chain object
chain.length integer
chain.valid boolean
chain.certificates[] object[]
chain.certificates[] object
chain.certificates[].subject string
chain.certificates[].issuer string
chain.certificates[].type string
chain.certificates[].valid_from string | null
chain.certificates[].valid_until string | null
chain.issues[] string[]
protocols object
protocols.tls_1_3 boolean
protocols.tls_1_2 boolean
protocols.tls_1_1 boolean
protocols.tls_1_0 boolean
protocols.ssl_3 boolean
protocols.preferred_protocol string
protocols.detection_method string
protocols.deprecated_protocols_enabled boolean
connection object
connection.preferred_protocol string | null
connection.preferred_cipher string | null
connection.alpn_negotiated string | null
connection.forward_secrecy boolean
connection.forward_secrecy_cipher string | null
connection.secure_renegotiation_supported boolean | null
connection.server_temp_key string | null
connection.peer_signing_digest string | null
connection.peer_signature_type string | null
connection.server_public_key_bits integer | null
connection.compression string | null
connection.expansion string | null
connection.client_certificate_requested boolean | null
certificate_delivery object
certificate_delivery.must_staple boolean
certificate_delivery.sct_embedded boolean
certificate_delivery.sct_count integer
certificate_delivery.ocsp_stapling_present boolean
certificate_delivery.ocsp_stapling_fresh boolean | null
certificate_delivery.ocsp_stapling_status string | null
certificate_delivery.ocsp_this_update string | null
certificate_delivery.ocsp_next_update string | null
transport object
transport.hsts object
transport.hsts.reachable boolean
transport.hsts.final_url string | null
transport.hsts.status_code integer | null
transport.hsts.header_present boolean
transport.hsts.hsts_header string | null
transport.hsts.max_age integer | null
transport.hsts.include_subdomains boolean | null
transport.hsts.preload_directive boolean | null
transport.hsts.preload_eligible boolean
transport.hsts.preload_status string | null
transport.hsts.preloaded_domain string | null
transport.hsts.issues[] string[]
transport.hsts.errors[] string[]
transport.http_versions object
transport.http_versions.http1_1 boolean
transport.http_versions.http2 boolean
transport.http_versions.http3 boolean
transport.http_versions.alt_svc string | null
transport.http_versions.http3_advertised boolean
transport.http_versions.alt_svc_protocols[] string[]
transport.http_versions.curl_http3_supported boolean
revocation object
revocation.ocsp object
revocation.ocsp.present boolean
revocation.ocsp.uris[] string[]
revocation.ocsp.checked_uri string | null
revocation.ocsp.status string | null
revocation.ocsp.verify_ok boolean
revocation.ocsp.this_update string | null
revocation.ocsp.next_update string | null
revocation.ocsp.error string | null
revocation.crl object
revocation.crl.present boolean
revocation.crl.uris[] string[]
revocation.crl.checked_uri string | null
revocation.crl.fetched boolean
revocation.crl.http_status integer | null
revocation.crl.revoked boolean | null
revocation.crl.last_update string | null
revocation.crl.next_update string | null
revocation.crl.revoked_serial_count integer | null
revocation.crl.error string | null
tls_extensions[] string[]
issues[] string[]
recommendations[] string[]
checked_at string
check_duration_ms integer

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/ssl/audit?domain=example.com"

예제 응답

{
  "domain": "cloudflare.com",
  "audit_completeness": "full",
  "probe_coverage": {
    "tls_inspect": true,
    "tls_audit": true,
    "tls_posture": true,
    "revocation": true,
    "hsts": true,
    "http_versions": true
  },
  "certificate": {
    "subject": "cloudflare.com",
    "issuer": "Google Trust Services",
    "valid_from": "2026-03-01T00:00:00Z",
    "valid_until": "2026-05-30T23:59:59Z",
    "days_remaining": 42,
    "expired": false,
    "san": [
      "cloudflare.com",
      "*.cloudflare.com"
    ],
    "key_type": "ECDSA",
    "key_size": 256,
    "signature_algorithm": "ecdsaWithSHA256",
    "serial_number": "539933F4CFE7E8CF13F5E60D139675A1",
    "fingerprint_sha256": "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99",
    "hostname_match": true
  },
  "chain": {
    "length": 3,
    "valid": true,
    "certificates": [
      {
        "subject": "cloudflare.com",
        "issuer": "Google Trust Services",
        "type": "leaf"
      },
      {
        "subject": "Google Trust Services",
        "issuer": "GlobalSign",
        "type": "intermediate"
      },
      {
        "subject": "GlobalSign",
        "issuer": "GlobalSign",
        "type": "root"
      }
    ],
    "issues": []
  },
  "protocols": {
    "tls_1_3": true,
    "tls_1_2": true,
    "tls_1_1": false,
    "tls_1_0": false,
    "ssl_3": false,
    "preferred_protocol": "TLSv1.3",
    "detection_method": "active",
    "deprecated_protocols_enabled": false
  },
  "connection": {
    "preferred_protocol": "TLSv1.3",
    "preferred_cipher": "TLS_AES_256_GCM_SHA384",
    "alpn_negotiated": "h2",
    "forward_secrecy": true,
    "forward_secrecy_cipher": "TLS_AES_256_GCM_SHA384",
    "secure_renegotiation_supported": false,
    "server_temp_key": "X25519, 253 bits",
    "peer_signing_digest": "SHA256",
    "peer_signature_type": "ECDSA",
    "server_public_key_bits": 256,
    "compression": "NONE",
    "expansion": "NONE",
    "client_certificate_requested": false
  },
  "certificate_delivery": {
    "must_staple": false,
    "sct_embedded": true,
    "sct_count": 2,
    "ocsp_stapling_present": true,
    "ocsp_stapling_fresh": true,
    "ocsp_stapling_status": "successful (0x0)",
    "ocsp_this_update": "2026-04-15T02:35:16Z",
    "ocsp_next_update": "2026-04-22T01:35:15Z"
  },
  "transport": {
    "hsts": {
      "reachable": true,
      "final_url": "https://cloudflare.com/",
      "status_code": 200,
      "header_present": true,
      "hsts_header": "max-age=31536000; includeSubDomains",
      "max_age": 31536000,
      "include_subdomains": true,
      "preload_directive": false,
      "preload_eligible": true,
      "preload_status": "preloaded",
      "preloaded_domain": "cloudflare.com",
      "issues": [
        "missing preload directive"
      ],
      "errors": []
    },
    "http_versions": {
      "http1_1": true,
      "http2": true,
      "http3": true,
      "alt_svc": "h3=\":443\"; ma=86400",
      "http3_advertised": true,
      "alt_svc_protocols": [
        "h3"
      ],
      "curl_http3_supported": true
    }
  },
  "revocation": {
    "ocsp": {
      "present": true,
      "uris": [
        "http://o.pki.goog/wr2"
      ],
      "checked_uri": "http://o.pki.goog/wr2",
      "status": "good",
      "verify_ok": true,
      "this_update": "2026-04-18T20:30:00Z",
      "next_update": "2026-04-19T20:30:00Z",
      "error": null
    },
    "crl": {
      "present": true,
      "uris": [
        "http://c.pki.goog/wr2.crl"
      ],
      "checked_uri": "http://c.pki.goog/wr2.crl",
      "fetched": true,
      "http_status": 200,
      "revoked": false,
      "last_update": "2026-04-17T00:00:00Z",
      "next_update": "2026-04-24T00:00:00Z",
      "revoked_serial_count": 0,
      "error": null
    }
  },
  "tls_extensions": [
    "key share",
    "supported versions",
    "server name"
  ],
  "issues": [],
  "recommendations": [
    "Add the preload directive if you want HSTS preload-list eligibility."
  ],
  "checked_at": "2026-04-18T21:00:00Z",
  "check_duration_ms": 512
}
GET /v1/ssl/deep-scan

쿼리 매개변수

매개변수 유형 필수
domain string 필수
refresh boolean 선택 사항
profile string 선택 사항

응답 필드

필드 유형
status string
domain string
host string
port integer
profile string
scan_token string
message string
poll_after_ms integer
cache object
cache.hit boolean
cache.fresh boolean
cache.started_at string | null
cache.completed_at string | null
cache.expires_at string | null
cache.engine string | null
cache.profile string | null
result object
result.domain string
result.host string
result.port integer
result.engine object
result.engine.name string
result.engine.mode string
result.engine.version string | null
result.engine.profile string
result.target object
result.target.ip string | null
result.target.service string | null
result.target.rdns string | null
result.summary object
result.summary.severity_counts object
result.summary.severity_counts.critical integer
result.summary.severity_counts.high integer
result.summary.severity_counts.medium integer
result.summary.severity_counts.low integer
result.summary.severity_counts.warn integer
result.summary.severity_counts.info integer
result.summary.severity_counts.ok integer
result.summary.actionable_findings integer
result.summary.protocols_offered[] string[]
result.summary.deprecated_protocols[] string[]
result.summary.supports_tls_1_3 boolean
result.summary.supports_http2 boolean | null
result.summary.supports_http3 boolean | null
result.sections object
result.sections.pretest[] object[]
result.sections.pretest[] object
result.sections.pretest[].id string
result.sections.pretest[].severity string
result.sections.pretest[].finding string
result.sections.pretest[].cve string
result.sections.pretest[].cwe string
result.sections.protocols[] object[]
result.sections.protocols[] object
result.sections.protocols[].id string
result.sections.protocols[].severity string
result.sections.protocols[].finding string
result.sections.protocols[].cve string
result.sections.protocols[].cwe string
result.sections.server_defaults[] object[]
result.sections.server_defaults[] object
result.sections.server_defaults[].id string
result.sections.server_defaults[].severity string
result.sections.server_defaults[].finding string
result.sections.server_defaults[].cve string
result.sections.server_defaults[].cwe string
result.sections.server_preferences[] object[]
result.sections.server_preferences[] object
result.sections.server_preferences[].id string
result.sections.server_preferences[].severity string
result.sections.server_preferences[].finding string
result.sections.server_preferences[].cve string
result.sections.server_preferences[].cwe string
result.sections.cipher_categories[] object[]
result.sections.cipher_categories[] object
result.sections.cipher_categories[].id string
result.sections.cipher_categories[].severity string
result.sections.cipher_categories[].finding string
result.sections.cipher_categories[].cve string
result.sections.cipher_categories[].cwe string
result.sections.forward_secrecy[] object[]
result.sections.forward_secrecy[] object
result.sections.forward_secrecy[].id string
result.sections.forward_secrecy[].severity string
result.sections.forward_secrecy[].finding string
result.sections.forward_secrecy[].cve string
result.sections.forward_secrecy[].cwe string
result.sections.vulnerabilities[] object[]
result.sections.vulnerabilities[] object
result.sections.vulnerabilities[].id string
result.sections.vulnerabilities[].severity string
result.sections.vulnerabilities[].finding string
result.sections.vulnerabilities[].cve string
result.sections.vulnerabilities[].cwe string
result.sections.browser_simulations[] object[]
result.sections.browser_simulations[] object
result.sections.browser_simulations[].id string
result.sections.browser_simulations[].severity string
result.sections.browser_simulations[].finding string
result.sections.browser_simulations[].cve string
result.sections.browser_simulations[].cwe string
result.sections.rating[] object[]
result.sections.rating[] object
result.sections.rating[].id string
result.sections.rating[].severity string
result.sections.rating[].finding string
result.sections.rating[].cve string
result.sections.rating[].cwe string
result.findings[] object[]
result.findings[] object
result.findings[].section string
result.findings[].id string
result.findings[].severity string
result.findings[].finding string
result.findings[].cve string
result.findings[].cwe string
result.checked_at string
result.scan_duration_ms integer
result.notes[] string[]
error object
error.message string
error.retryable boolean

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/ssl/deep-scan?domain=openai.com&refresh=example.com&profile=example.com"

예제 응답

{
  "status": "ready",
  "domain": "openai.com",
  "host": "openai.com",
  "port": 443,
  "profile": "full",
  "scan_token": "eyJrIjoidGxzLWRlZXAtc2NhbiIsImkiOiJleGFtcGxlIiwiaCI6Im9wZW5haS5jb20ifQ",
  "cache": {
    "hit": true,
    "fresh": true,
    "completed_at": "2026-04-18T22:10:00Z",
    "expires_at": "2026-04-19T22:10:00Z",
    "engine": "testssl.sh",
    "profile": "full"
  },
  "result": {
    "domain": "openai.com",
    "host": "openai.com",
    "port": 443,
    "engine": {
      "name": "testssl.sh",
      "mode": "testssl",
      "version": "3.3dev",
      "profile": "full"
    },
    "target": {
      "ip": "172.64.154.211",
      "service": "HTTP",
      "rdns": "--"
    },
    "summary": {
      "severity_counts": {
        "critical": 0,
        "high": 1,
        "medium": 1,
        "low": 0,
        "warn": 1,
        "info": 6,
        "ok": 4
      },
      "actionable_findings": 3,
      "protocols_offered": [
        "TLS1_2",
        "TLS1_3"
      ],
      "deprecated_protocols": [],
      "supports_tls_1_3": true,
      "supports_http2": true,
      "supports_http3": null
    },
    "sections": {
      "pretest": [],
      "protocols": [
        {
          "id": "TLS1_2",
          "severity": "OK",
          "finding": "offered"
        },
        {
          "id": "TLS1_3",
          "severity": "OK",
          "finding": "offered with final"
        },
        {
          "id": "QUIC",
          "severity": "WARN",
          "finding": "not tested due to lack of local OpenSSL support"
        }
      ],
      "server_defaults": [
        {
          "id": "early_data",
          "severity": "HIGH",
          "finding": "supported"
        }
      ],
      "server_preferences": [],
      "cipher_categories": [],
      "forward_secrecy": [],
      "vulnerabilities": [
        {
          "id": "BREACH",
          "severity": "MEDIUM",
          "finding": "potentially VULNERABLE, br gzip HTTP compression detected",
          "cve": "CVE-2013-3587",
          "cwe": "CWE-310"
        }
      ],
      "browser_simulations": [],
      "rating": []
    },
    "findings": [
      {
        "section": "protocols",
        "id": "QUIC",
        "severity": "WARN",
        "finding": "not tested due to lack of local OpenSSL support"
      },
      {
        "section": "server_defaults",
        "id": "early_data",
        "severity": "HIGH",
        "finding": "supported"
      },
      {
        "section": "vulnerabilities",
        "id": "BREACH",
        "severity": "MEDIUM",
        "finding": "potentially VULNERABLE, br gzip HTTP compression detected",
        "cve": "CVE-2013-3587",
        "cwe": "CWE-310"
      }
    ],
    "checked_at": "2026-04-18T22:10:00Z",
    "scan_duration_ms": 53880,
    "notes": []
  }
}
GET /v1/ssl/deep-scan/status

쿼리 매개변수

매개변수 유형 필수
scan_token string 필수

응답 필드

필드 유형
status string
domain string
host string
port integer
profile string
scan_token string
message string
poll_after_ms integer
cache object
cache.hit boolean
cache.fresh boolean
cache.started_at string | null
cache.completed_at string | null
cache.expires_at string | null
cache.engine string | null
cache.profile string | null
result object
result.domain string
result.host string
result.port integer
result.engine object
result.engine.name string
result.engine.mode string
result.engine.version string | null
result.engine.profile string
result.target object
result.target.ip string | null
result.target.service string | null
result.target.rdns string | null
result.summary object
result.summary.severity_counts object
result.summary.severity_counts.critical integer
result.summary.severity_counts.high integer
result.summary.severity_counts.medium integer
result.summary.severity_counts.low integer
result.summary.severity_counts.warn integer
result.summary.severity_counts.info integer
result.summary.severity_counts.ok integer
result.summary.actionable_findings integer
result.summary.protocols_offered[] string[]
result.summary.deprecated_protocols[] string[]
result.summary.supports_tls_1_3 boolean
result.summary.supports_http2 boolean | null
result.summary.supports_http3 boolean | null
result.sections object
result.sections.pretest[] object[]
result.sections.pretest[] object
result.sections.pretest[].id string
result.sections.pretest[].severity string
result.sections.pretest[].finding string
result.sections.pretest[].cve string
result.sections.pretest[].cwe string
result.sections.protocols[] object[]
result.sections.protocols[] object
result.sections.protocols[].id string
result.sections.protocols[].severity string
result.sections.protocols[].finding string
result.sections.protocols[].cve string
result.sections.protocols[].cwe string
result.sections.server_defaults[] object[]
result.sections.server_defaults[] object
result.sections.server_defaults[].id string
result.sections.server_defaults[].severity string
result.sections.server_defaults[].finding string
result.sections.server_defaults[].cve string
result.sections.server_defaults[].cwe string
result.sections.server_preferences[] object[]
result.sections.server_preferences[] object
result.sections.server_preferences[].id string
result.sections.server_preferences[].severity string
result.sections.server_preferences[].finding string
result.sections.server_preferences[].cve string
result.sections.server_preferences[].cwe string
result.sections.cipher_categories[] object[]
result.sections.cipher_categories[] object
result.sections.cipher_categories[].id string
result.sections.cipher_categories[].severity string
result.sections.cipher_categories[].finding string
result.sections.cipher_categories[].cve string
result.sections.cipher_categories[].cwe string
result.sections.forward_secrecy[] object[]
result.sections.forward_secrecy[] object
result.sections.forward_secrecy[].id string
result.sections.forward_secrecy[].severity string
result.sections.forward_secrecy[].finding string
result.sections.forward_secrecy[].cve string
result.sections.forward_secrecy[].cwe string
result.sections.vulnerabilities[] object[]
result.sections.vulnerabilities[] object
result.sections.vulnerabilities[].id string
result.sections.vulnerabilities[].severity string
result.sections.vulnerabilities[].finding string
result.sections.vulnerabilities[].cve string
result.sections.vulnerabilities[].cwe string
result.sections.browser_simulations[] object[]
result.sections.browser_simulations[] object
result.sections.browser_simulations[].id string
result.sections.browser_simulations[].severity string
result.sections.browser_simulations[].finding string
result.sections.browser_simulations[].cve string
result.sections.browser_simulations[].cwe string
result.sections.rating[] object[]
result.sections.rating[] object
result.sections.rating[].id string
result.sections.rating[].severity string
result.sections.rating[].finding string
result.sections.rating[].cve string
result.sections.rating[].cwe string
result.findings[] object[]
result.findings[] object
result.findings[].section string
result.findings[].id string
result.findings[].severity string
result.findings[].finding string
result.findings[].cve string
result.findings[].cwe string
result.checked_at string
result.scan_duration_ms integer
result.notes[] string[]
error object
error.message string
error.retryable boolean

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/ssl/deep-scan/status?scan_token=example.com"

예제 응답

{
  "status": "ready",
  "domain": "openai.com",
  "host": "openai.com",
  "port": 443,
  "profile": "full",
  "scan_token": "eyJrIjoidGxzLWRlZXAtc2NhbiIsImkiOiJleGFtcGxlIiwiaCI6Im9wZW5haS5jb20ifQ",
  "cache": {
    "hit": true,
    "fresh": true,
    "completed_at": "2026-04-18T22:10:00Z",
    "expires_at": "2026-04-19T22:10:00Z",
    "engine": "testssl.sh",
    "profile": "full"
  },
  "result": {
    "domain": "openai.com",
    "host": "openai.com",
    "port": 443,
    "engine": {
      "name": "testssl.sh",
      "mode": "testssl",
      "version": "3.3dev",
      "profile": "full"
    },
    "target": {
      "ip": "172.64.154.211",
      "service": "HTTP",
      "rdns": "--"
    },
    "summary": {
      "severity_counts": {
        "critical": 0,
        "high": 1,
        "medium": 1,
        "low": 0,
        "warn": 1,
        "info": 6,
        "ok": 4
      },
      "actionable_findings": 3,
      "protocols_offered": [
        "TLS1_2",
        "TLS1_3"
      ],
      "deprecated_protocols": [],
      "supports_tls_1_3": true,
      "supports_http2": true,
      "supports_http3": null
    },
    "sections": {
      "pretest": [],
      "protocols": [
        {
          "id": "TLS1_2",
          "severity": "OK",
          "finding": "offered"
        },
        {
          "id": "TLS1_3",
          "severity": "OK",
          "finding": "offered with final"
        },
        {
          "id": "QUIC",
          "severity": "WARN",
          "finding": "not tested due to lack of local OpenSSL support"
        }
      ],
      "server_defaults": [
        {
          "id": "early_data",
          "severity": "HIGH",
          "finding": "supported"
        }
      ],
      "server_preferences": [],
      "cipher_categories": [],
      "forward_secrecy": [],
      "vulnerabilities": [
        {
          "id": "BREACH",
          "severity": "MEDIUM",
          "finding": "potentially VULNERABLE, br gzip HTTP compression detected",
          "cve": "CVE-2013-3587",
          "cwe": "CWE-310"
        }
      ],
      "browser_simulations": [],
      "rating": []
    },
    "findings": [
      {
        "section": "protocols",
        "id": "QUIC",
        "severity": "WARN",
        "finding": "not tested due to lack of local OpenSSL support"
      },
      {
        "section": "server_defaults",
        "id": "early_data",
        "severity": "HIGH",
        "finding": "supported"
      },
      {
        "section": "vulnerabilities",
        "id": "BREACH",
        "severity": "MEDIUM",
        "finding": "potentially VULNERABLE, br gzip HTTP compression detected",
        "cve": "CVE-2013-3587",
        "cwe": "CWE-310"
      }
    ],
    "checked_at": "2026-04-18T22:10:00Z",
    "scan_duration_ms": 53880,
    "notes": []
  }
}
GET /v1/ssl/grade

쿼리 매개변수

매개변수 유형 필수
domain string 필수

응답 필드

필드 유형
domain string
grade string
score integer
protocol_support object
protocol_support.tls_1_3 boolean
protocol_support.tls_1_2 boolean
protocol_support.tls_1_1 boolean
protocol_support.tls_1_0 boolean
protocol_support.ssl_3 boolean
protocol_support.preferred_protocol string
protocol_support.detection_method string
certificate object
certificate.subject string
certificate.issuer string
certificate.valid_from string
certificate.valid_until string
certificate.days_remaining integer
certificate.expired boolean
certificate.san[] string[]
certificate.key_type string
certificate.key_size integer
certificate.signature_algorithm string
certificate.fingerprint_sha256 string
chain object
chain.length integer
chain.valid boolean
chain.certificates[] object[]
chain.certificates[] object
chain.certificates[].subject string
chain.certificates[].issuer string
chain.certificates[].type string
chain.issues[] string[]
security object
security.forward_secrecy boolean
security.forward_secrecy_cipher string
security.hsts_enabled boolean
security.hsts_max_age integer
security.hsts_include_subdomains boolean
security.hsts_preload boolean
security.hsts_header string
security.hsts_preload_status string
security.hsts_preloaded_domain string
security.hsts_preload_eligible boolean
security.hsts_final_url string
security.hsts_errors[] string[]
security.alpn_negotiated string
security.ocsp_stapling boolean
security.ocsp_stapling_fresh boolean
security.ocsp_stapling_status string | null
security.ocsp_stapling_this_update string | null
security.ocsp_stapling_next_update string | null
security.sct_embedded boolean
security.sct_count integer
security.ct_compliance boolean
security.must_staple boolean
security.secure_renegotiation boolean
revocation object
revocation.ocsp object
revocation.ocsp.present boolean
revocation.ocsp.uris[] string[]
revocation.ocsp.checked_uri string | null
revocation.ocsp.status string | null
revocation.ocsp.verify_ok boolean
revocation.ocsp.this_update string | null
revocation.ocsp.next_update string | null
revocation.ocsp.error string | null
revocation.crl object
revocation.crl.present boolean
revocation.crl.uris[] string[]
revocation.crl.checked_uri string | null
revocation.crl.fetched boolean
revocation.crl.http_status integer | null
revocation.crl.revoked boolean | null
revocation.crl.last_update string | null
revocation.crl.next_update string | null
revocation.crl.revoked_serial_count integer | null
revocation.crl.error string | null
issues[] string[]
recommendations[] string[]
checked_at string
check_duration_ms integer

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/ssl/grade?domain=example.com"

예제 응답

{
  "domain": "cloudflare.com",
  "grade": "A+",
  "score": 98,
  "protocol_support": {
    "tls_1_3": true,
    "tls_1_2": true,
    "tls_1_1": false,
    "tls_1_0": false,
    "ssl_3": false,
    "preferred_protocol": "TLSv1.3",
    "detection_method": "active"
  },
  "certificate": {
    "subject": "cloudflare.com",
    "issuer": "Google Trust Services",
    "valid_from": "2026-03-01T00:00:00Z",
    "valid_until": "2026-05-30T23:59:59Z",
    "days_remaining": 42,
    "expired": false,
    "san": [
      "cloudflare.com",
      "*.cloudflare.com"
    ],
    "key_type": "ECDSA",
    "key_size": 256,
    "signature_algorithm": "ecdsaWithSHA256",
    "fingerprint_sha256": "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"
  },
  "chain": {
    "length": 3,
    "valid": true,
    "certificates": [
      {
        "subject": "cloudflare.com",
        "issuer": "Google Trust Services",
        "type": "leaf"
      },
      {
        "subject": "Google Trust Services",
        "issuer": "GlobalSign",
        "type": "intermediate"
      },
      {
        "subject": "GlobalSign",
        "issuer": "GlobalSign",
        "type": "root"
      }
    ],
    "issues": []
  },
  "security": {
    "forward_secrecy": true,
    "forward_secrecy_cipher": "TLS_AES_256_GCM_SHA384",
    "hsts_enabled": true,
    "hsts_max_age": 31536000,
    "hsts_include_subdomains": true,
    "hsts_preload": true,
    "hsts_header": "max-age=31536000; includeSubDomains; preload",
    "hsts_preload_status": "preloaded",
    "hsts_preloaded_domain": "cloudflare.com",
    "hsts_preload_eligible": true,
    "hsts_final_url": "https://cloudflare.com/",
    "hsts_errors": [],
    "alpn_negotiated": "h2",
    "ocsp_stapling": true,
    "ocsp_stapling_fresh": true,
    "ocsp_stapling_status": "successful (0x0)",
    "ocsp_stapling_this_update": "2026-04-15T02:35:16Z",
    "ocsp_stapling_next_update": "2026-04-22T01:35:15Z",
    "ct_compliance": true,
    "must_staple": false,
    "sct_embedded": true,
    "sct_count": 2
  },
  "revocation": {
    "ocsp": {
      "present": true,
      "uris": [
        "http://o.pki.goog/wr2"
      ],
      "checked_uri": "http://o.pki.goog/wr2",
      "status": "good",
      "verify_ok": true,
      "this_update": "2026-04-18T20:30:00Z",
      "next_update": "2026-04-19T20:30:00Z",
      "error": null
    },
    "crl": {
      "present": true,
      "uris": [
        "http://c.pki.goog/wr2.crl"
      ],
      "checked_uri": "http://c.pki.goog/wr2.crl",
      "fetched": true,
      "http_status": 200,
      "revoked": false,
      "last_update": "2026-04-17T00:00:00Z",
      "next_update": "2026-04-24T00:00:00Z",
      "revoked_serial_count": 0,
      "error": null
    }
  },
  "issues": [],
  "recommendations": [],
  "checked_at": "2026-04-18T21:00:00Z",
  "check_duration_ms": 142
}
GET /v1/ssl/chain

쿼리 매개변수

매개변수 유형 필수
domain string 필수

응답 필드

필드 유형
domain string
chain[] object[]
chain[] object
chain[].subject string
chain[].issuer string
chain[].type string
chain[].valid_from string | null
chain[].valid_until string | null
chain_length integer
root_trusted boolean
chain_valid boolean
certificate object
certificate.subject string
certificate.issuer string
certificate.valid_from string
certificate.valid_until string
certificate.days_remaining integer
certificate.expired boolean
certificate.san[] string[]
certificate.key_type string
certificate.key_size integer
certificate.signature_algorithm string
certificate.fingerprint_sha256 string
protocol_support object
protocol_support.tls_1_3 boolean
protocol_support.tls_1_2 boolean
protocol_support.tls_1_1 boolean
protocol_support.tls_1_0 boolean
protocol_support.ssl_3 boolean
protocol_support.preferred_protocol string
protocol_support.detection_method string
security object
security.alpn_negotiated string
security.forward_secrecy boolean
security.forward_secrecy_cipher string
security.must_staple boolean
security.sct_embedded boolean
security.sct_count integer
security.ocsp_stapling boolean
security.ocsp_stapling_fresh boolean
security.ocsp_stapling_status string | null
security.ocsp_stapling_this_update string | null
security.ocsp_stapling_next_update string | null
issues[] string[]
revocation object
revocation.ocsp object
revocation.ocsp.present boolean
revocation.ocsp.uris[] string[]
revocation.ocsp.checked_uri string | null
revocation.ocsp.status string | null
revocation.ocsp.verify_ok boolean
revocation.ocsp.this_update string | null
revocation.ocsp.next_update string | null
revocation.ocsp.error string | null
revocation.crl object
revocation.crl.present boolean
revocation.crl.uris[] string[]
revocation.crl.checked_uri string | null
revocation.crl.fetched boolean
revocation.crl.http_status integer | null
revocation.crl.revoked boolean | null
revocation.crl.last_update string | null
revocation.crl.next_update string | null
revocation.crl.revoked_serial_count integer | null
revocation.crl.error string | null
checked_at string

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/ssl/chain?domain=example.com"

예제 응답

{
  "domain": "cloudflare.com",
  "chain": [
    {
      "subject": "cloudflare.com",
      "issuer": "Google Trust Services",
      "type": "leaf",
      "valid_from": "2026-03-01T00:00:00Z",
      "valid_until": "2026-05-30T23:59:59Z"
    },
    {
      "subject": "Google Trust Services",
      "issuer": "GlobalSign",
      "type": "intermediate",
      "valid_from": "2024-01-01T00:00:00Z",
      "valid_until": "2029-01-01T00:00:00Z"
    }
  ],
  "chain_valid": true,
  "chain_length": 2,
  "root_trusted": true,
  "certificate": {
    "subject": "cloudflare.com",
    "issuer": "Google Trust Services",
    "valid_from": "2026-03-01T00:00:00Z",
    "valid_until": "2026-05-30T23:59:59Z",
    "days_remaining": 42,
    "expired": false,
    "san": [
      "cloudflare.com",
      "*.cloudflare.com"
    ],
    "key_type": "ECDSA",
    "key_size": 256,
    "signature_algorithm": "ecdsaWithSHA256",
    "fingerprint_sha256": "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99"
  },
  "protocol_support": {
    "tls_1_3": true,
    "tls_1_2": true,
    "tls_1_1": false,
    "tls_1_0": false,
    "ssl_3": false,
    "preferred_protocol": "TLSv1.3",
    "detection_method": "active"
  },
  "security": {
    "alpn_negotiated": "h2",
    "forward_secrecy": true,
    "forward_secrecy_cipher": "TLS_AES_256_GCM_SHA384",
    "must_staple": false,
    "sct_embedded": true,
    "sct_count": 2,
    "ocsp_stapling": true,
    "ocsp_stapling_fresh": true,
    "ocsp_stapling_status": "successful (0x0)",
    "ocsp_stapling_this_update": "2026-04-15T02:35:16Z",
    "ocsp_stapling_next_update": "2026-04-22T01:35:15Z"
  },
  "issues": [],
  "revocation": {
    "ocsp": {
      "present": true,
      "uris": [
        "http://o.pki.goog/wr2"
      ],
      "checked_uri": "http://o.pki.goog/wr2",
      "status": "good",
      "verify_ok": true,
      "this_update": "2026-04-18T20:30:00Z",
      "next_update": "2026-04-19T20:30:00Z",
      "error": null
    },
    "crl": {
      "present": true,
      "uris": [
        "http://c.pki.goog/wr2.crl"
      ],
      "checked_uri": "http://c.pki.goog/wr2.crl",
      "fetched": true,
      "http_status": 200,
      "revoked": false,
      "last_update": "2026-04-17T00:00:00Z",
      "next_update": "2026-04-24T00:00:00Z",
      "revoked_serial_count": 0,
      "error": null
    }
  },
  "checked_at": "2026-04-18T21:00:00Z"
}
GET /v1/ssl/expiring

쿼리 매개변수

매개변수 유형 필수
domain string 필수
threshold_days integer 선택 사항

응답 필드

필드 유형
domain string
expiring_soon boolean
expired boolean
days_remaining integer
valid_until string
urgency string

예제 요청

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/ssl/expiring?domain=example.com&threshold_days=example.com"

예제 응답

{
  "domain": "example.com",
  "expiring_soon": true,
  "expired": true,
  "days_remaining": 1,
  "valid_until": "string",
  "urgency": "none"
}

놀라운 회사의 사람들이 사용함

VercelLLM PulseOLXCasa ModernaPipeCal.comBeehiivSnykTogglRemoteSprigDeel