Kiểm tra chứng chỉ SSL API
Kiểm tra chứng chỉ SSL/TLS của tên miền: số ngày còn hạn, nhà cấp, SAN, khớp tên miền, chuỗi chứng chỉ, OCSP stapling, phiên bản TLS, cipher.
Gửi host (tên miền hoặc IP, có thể kèm :port), API mở kết nối TLS từ máy chủ biên của chúng tôi và đọc các chứng chỉ mà máy chủ gửi về. Kết quả gồm chứng chỉ chính (chủ thể, nhà cấp, số serial, ngày hiệu lực và days_remaining, SAN, loại và độ dài khoá, thuật toán ký, mức DV / OV / EV, mục đích sử dụng khoá, URL OCSP / CA issuer / CRL, dấu vân tay SHA-256 và SHA-1), chuỗi chứng chỉ với chữ ký của từng chứng chỉ được kiểm tra bằng chứng chỉ kế tiếp, phiên bản TLS, bộ mã hoá (cipher suite), nhóm trao đổi khoá và ALPN đã thương lượng, cùng trạng thái OCSP được đính kèm (good / revoked) nếu máy chủ có gửi. Với protocols (bật sẵn khi kiểm tra một host), API còn thử máy chủ có chấp nhận TLS 1.0, 1.1, 1.2 và 1.3 hay không.
Phần tóm tắt cho biết chứng chỉ có hợp lệ với tên miền không, và warnings liệt kê vấn đề bằng mã dễ hiểu: expired (hết hạn), expires_soon (sắp hết hạn trong warn_days, mặc định 30 ngày), hostname_mismatch (sai tên miền), self_signed (tự ký), incomplete_chain (thiếu chứng chỉ trung gian, phát hiện bằng cách tải chứng chỉ nhà cấp từ URL AIA), weak_signature_algorithm, weak_key, legacy_protocol_enabled, revoked. API cũng gửi thêm một request HTTPS bình thường có kiểm tra chứng chỉ (https_request), phản ánh việc chứng chỉ có được các kho chứng chỉ gốc thông dụng tin cậy hay không. hosts kiểm tra tối đa 10 tên miền một lần, mỗi tên miền trả về một bản tóm tắt ngắn.
Giới hạn cần biết: máy chủ biên chạy trên Cloudflare Workers, vốn không mở được kết nối TCP trực tiếp tới dải IP của Cloudflare. Với website đứng sau Cloudflare (hoặc khi kết nối quá thời gian chờ), kết quả ghi source: "certificate_transparency": các chứng chỉ được liệt kê là chứng chỉ còn hiệu lực đã công bố trên nhật ký Certificate Transparency (Cert Spotter, crt.sh) cho tên miền đó, chưa chắc là chứng chỉ đang được dùng, kèm kết quả request HTTPS thực tế. Cổng cho phép: 443, 8443 và các cổng TLS trực tiếp thông dụng (465, 993, 995, 636…); địa chỉ nội bộ, riêng tư bị từ chối.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
host | query | string | có | Tên miền hoặc IP, có thể kèm :port hoặc ở dạng URL (https://example.com:8443/). | |
port | query | number | không | 443 | Cổng TLS: 443, 8443, 465, 563, 636, 853, 989, 990, 992–995, 2083, 2087, 2096, 5061, 6697, 8883, 9443. |
servername | query | string | không | Tên SNI gửi đi khi khác host (ví dụ khi kiểm tra theo IP). | |
protocols | query | boolean | không | true | Thử thêm việc hỗ trợ TLS 1.0 / 1.1 / 1.2 / 1.3 (4 lần bắt tay ngắn). Mặc định tắt khi dùng hosts. |
warn_days | query | number | không | 30 | Ngưỡng cảnh báo expires_soon tính bằng ngày (1–365). |
ct | query | boolean | không | false | Liệt kê thêm các chứng chỉ còn hiệu lực tìm thấy trên nhật ký Certificate Transparency. |
hosts | body|query | array | không | Tối đa 10 host (mảng hoặc phân tách bằng dấu phẩy) để kiểm tra hàng loạt; mỗi host trả về một bản tóm tắt. |
Ví dụ
curl "https://apibox.io.vn/v1/ssl-check?host=github.com" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/ssl-check?host=github.com', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/ssl-check?host=github.com",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/ssl-check?host=github.com');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"host": "github.com",
"port": 443,
"sni": "github.com",
"addresses": [
"20.205.243.166"
],
"source": "live_handshake",
"tls": {
"version": "TLS 1.3",
"cipher": "TLS_AES_128_GCM_SHA256",
"key_exchange_group": "x25519",
"alpn": "h2",
"handshake_ms": 162,
"ocsp_stapling": {
"stapled": false
}
},
"protocols": {
"TLS 1.0": false,
"TLS 1.1": false,
"TLS 1.2": true,
"TLS 1.3": true
},
"summary": {
"observed": true,
"valid": true,
"hostname_match": true,
"matched_name": "DNS:github.com",
"days_remaining": 77,
"expires_at": "2027-01-27T23:59:59Z",
"issuer": "Sectigo Limited",
"validation_level": "DV",
"chain_length": 3,
"chain_complete": null,
"chain_issuer_checked": null
},
"certificate": {
"subject": "CN=github.com",
"issuer": "C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV E36",
"serial_number": "3E:1D:60:26:B4:B0:AE:A2:79:DC:A2:EF:BB:CE:D8:2B",
"version": 3,
"not_before": "2026-10-30T00:00:00Z",
"not_after": "2027-01-27T23:59:59Z",
"days_remaining": 77,
"valid_now": true,
"validity_days": 90,
"san": {
"dns": [
"github.com",
"www.github.com"
],
"ip": [],
"email": [],
"uri": []
},
"public_key": {
"algorithm": "EC",
"curve": "P-256",
"size": 256
},
"signature_algorithm": "ecdsa-with-SHA256",
"is_ca": false,
"self_signed": false,
"validation_level": "DV",
"extensions": {
"key_usage": [
"digitalSignature"
],
"extended_key_usage": [
"serverAuth"
],
"ocsp_urls": [
"http://ocsp.sectigo.com"
],
"ca_issuer_urls": [
"http://crt.sectigo.com/SectigoPublicServerAuthenticationCADVE36.crt"
],
"sct_present": true
},
"fingerprints": {
"sha256": "7D:C4:D8:5C:F1:E3:10:97:12:25:BC:9A:92:57:67:90:43:A2:43:D7:0A:3C:C2:A9:1C:C5:D3:89:89:2C:27:76",
"sha1": "E6:52:C8:BD:1C:AF:D0:4A:44:23:9F:A8:DA:B0:C5:9D:EA:CB:79:EE"
}
},
"chain": [
{
"index": 0,
"subject": "CN=github.com",
"issuer": "C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV E36",
"not_after": "2027-01-27T23:59:59Z",
"days_remaining": 77,
"signature_algorithm": "ecdsa-with-SHA256",
"is_ca": false,
"self_signed": false,
"signed_by_next": true
},
{
"index": 1,
"subject": "C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication CA DV E36",
"issuer": "C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root E46",
"not_after": "2036-03-21T23:59:59Z",
"days_remaining": 3418,
"signature_algorithm": "ecdsa-with-SHA384",
"is_ca": true,
"self_signed": false,
"signed_by_next": true
},
{
"index": 2,
"subject": "C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root E46",
"issuer": "C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust ECC Certification Authority",
"not_after": "2038-01-18T23:59:59Z",
"days_remaining": 4086,
"signature_algorithm": "ecdsa-with-SHA384",
"is_ca": true,
"self_signed": false,
"signed_by_next": null
}
],
"https_request": {
"url": "https://github.com/",
"ok": true,
"status": 200,
"ms": 177,
"error": null,
"hsts": "max-age=31536000; includeSubdomains; preload"
},
"warnings": [],
"note": "Observed live: the certificates the server presented in a TLS handshake from our edge. …"
}
Ứng dụng
- Nhận cảnh báo trước khi chứng chỉ SSL của website khách hàng hết hạn
- Kiểm tra chứng chỉ mới đã cài đủ chuỗi trung gian chưa
- Rà soát máy chủ còn bật TLS 1.0 / 1.1
- Kiểm tra chứng chỉ của 10 tên miền trong một lần gọi từ cron job
Hỏi đáp
Vì sao website dùng Cloudflare lại hiện certificate_transparency?
Cloudflare Workers không mở được kết nối TCP tới địa chỉ IP của Cloudflare nên không bắt tay TLS trực tiếp được. Khi đó API liệt kê các chứng chỉ còn hiệu lực đã ghi trong nhật ký CT và xác nhận bằng một request HTTPS thực tế.
"valid" có nghĩa là trình duyệt tin cậy chứng chỉ không?
Nghĩa là chứng chỉ còn trong thời hạn, khớp tên miền, không tự ký, chữ ký trong chuỗi đúng và không thiếu chứng chỉ trung gian. Việc được kho chứng chỉ gốc tin cậy thể hiện ở https_request.
Có kiểm tra được cổng mail hay cổng TLS khác không?
Được với các cổng TLS trực tiếp như 465, 993, 995, 636 và 8443. STARTTLS (25, 587, 143) chưa được hỗ trợ.
API liên quan
Định vị IP
Tra cứu quốc gia, tỉnh/thành, toạ độ, ASN và nhà mạng của bất kỳ địa chỉ IPv4, IPv6 nào – hoặc IP của chính bạn – chỉ với một request JSON.
DNSTra cứu DNS
Tra bản ghi A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV… của mọi tên miền hoặc tra ngược IP (PTR) qua DNS over HTTPS, kết quả JSON gọn gàng.
@Kiểm tra e-mail
Kiểm tra địa chỉ e-mail: cú pháp RFC, bản ghi MX/A, ~120k tên miền e-mail tạm, tài khoản chức năng, nhà cung cấp miễn phí và gợi ý gõ sai như gmial.com.