TLS Test
-任意のホストに対してTLS/SSL設定の詳細チェックを行い、SSS〜Rの21段階でランク付けします。
- -プロトコルバージョン・暗号スイート・証明書・HSTS・CAA・HTTP/1-2-3 対応・主要脆弱性・ハンドシェイクシミュレーションを検査します。
-IP 直接入力の場合、SNI/証明書名の一致を判定できないため減点対象となることがあります。
-利用上の注意
--
-
- このツールはとりあえず動けば良いやと、Claudeの性能チェックも兼ねて、仕様書っぽいやつ以外ほぼ丸ごと作らせたため、バグがいくつかあると思います。レイアウトがあまり良くない箇所とかもすでに何箇所か発見しています。今後改善予定です。 -
- このツールは指定されたホストに対して実際に TLS 接続を行います。第三者のサーバーに対するスキャンは、対象サーバーの利用規約や法律を遵守した上で行ってください。 -
- レート制限: 同一 IP から同時実行は 1 件、1 時間あたり 10 件までです。 -
- 結果は7日間保持されます。テストIDを知っている人は同じ結果を閲覧できます。 -
- Nercone TLS Testサービスが使用するUser-Agent文字列は
nercone-tls-test/1.0です。
-
API
-同等の機能を JSON API として提供しています。
-POST /api/tools/tls-test/scan-
Content-Type: application/json
{"target": "example.com"}
{{ error }}
+ {% endif %} + + + +使用上の注意
+-
+
- このツールは指定されたホストに対して実際に TLS 接続を行います。第三者のサーバーに対するスキャンは、対象サーバーの利用規約や法律を遵守した上で行ってください。 +
- レート制限: 同一 IP から同時実行は 1 件、1 時間あたり 10 件までです。 +
- 結果は最長 1 年間保持されます。少なくとも 7 日間は保存され、7 日経過後は件数が多い場合にのみ古い順に自動削除されます。テストIDを知っている人は同じ結果を閲覧できます。 +
- ドメイン名 / サブドメイン / IPv4 / IPv6 /
host:port形式を受け付けます。IP 直接入力の場合、SNI/証明書名の一致を判定できないため減点対象となることがあります。
+ - Nercone TLS Test が使用する User-Agent 文字列は
nercone-tls-test/1.0です。
+
APIドキュメント
+同等の機能を JSON API として提供しています。
+POST /api/tools/tls-test/scan
+Content-Type: application/json
+
+{"target": "example.com"}
+ 以下のエンドポイントで進捗・結果を取得できます。
+GET /api/tools/tls-test/status/{test_id}
+GET /api/tools/tls-test/results/{test_id}
+ {{ category_titles.get(cat_key, cat_key|capitalize) }}
- {% for f in findings %} -- [{{ f.severity_label }}] - {{ f.title }} - {% if f.detail %}— {{ f.detail }}{% endif %} -
- {% endfor %} -Handshake Simulation
-| Client | Version | Cipher |
|---|---|---|
| {{ s.client }} | -- {% if s.connected %} - {{ s.negotiated_version }} - {% else %} - failed - {% endif %} - | -- {% if s.connected %}{{ s.negotiated_cipher }}{% else %}{{ s.error }}{% endif %} - | -
Raw JSON
-API でも同じデータを取得できます: GET /api/tools/tls-test/results/{{ test_id }}
Show raw result JSON
-{{ result | tojson(indent=2) }}
- 証明書チェーン
+| # | CN / Subject | 発行者 | 有効期限 | 署名 | 鍵 | +
|---|---|---|---|---|---|
| {{ loop.index }} | +
+ {{ c.common_name or c.subject or '—' }}
+ {% if c.sans %}SAN: {{ (c.sans or [])|join(', ') }} {% endif %}
+ |
+ {{ c.issuer or '—' }} | +
+ {{ c.not_after or '—' }}
+ {% if c.is_expired %}期限切れ
+ {% elif c.days_until_expiry is defined and c.days_until_expiry is not none %}残 {{ c.days_until_expiry }} 日{% endif %}
+ |
+ {{ (c.signature_hash_algorithm or '—')|upper }} | ++ {{ c.public_key_algorithm or '—' }}{% if c.public_key_size_bits %} {{ c.public_key_size_bits }}-bit{% endif %} + {% if c.public_key_curve %} ({{ c.public_key_curve }}){% endif %} + | +
プラットフォームごとの信頼状況
+| プラットフォーム | 信頼 | 状況 |
|---|---|---|
| {{ t.platform }} | +{{ yn(t.trusted, '信頼', '未信頼') }} | +{{ t.error or '—' }} | +
失効・HSTS・CAA
+| OCSP | {{ rev_cell(ocsp, 'OCSP') }} |
|---|---|
| CRL | {{ rev_cell(crl, 'CRL') }} |
| HSTS | + {%- if not hsts or hsts.error -%} + — + {%- elif hsts.present -%} + 有効 + max-age={{ hsts.max_age }}{% if hsts.include_subdomains %}; includeSubDomains{% endif %}{% if hsts.preload %}; preload{% endif %} + {%- else -%} + 無効 + {%- endif -%} + |
| HSTS preload | + {%- if preload -%} + {%- for p in preload -%} + {{ p.browser }}: {{ yn(p.listed, 'Listed', 'Not listed') }}{% if not loop.last %} · {% endif %} + {%- endfor -%} + {%- else -%} + — + {%- endif -%} + |
| CAA |
+ {%- if not caa -%}
+ —
+ {%- elif caa.records -%}
+ {{ caa.records|length }} 件
+ ({{ caa.effective_host }})
+ {{ caa.records|join('; ') }}
+ {%- else -%}
+ 未設定
+ {%- endif -%}
+ |
信頼性に関するすべてのログ
+対応プロトコル
+| バージョン | 対応 |
|---|---|
| {{ name }} | {{ yn(ok, '有効', '無効') }} |
受理された暗号スイート
+ {% for name, cs in ciphers.items() %} + {% if cs %} +{{ name }} ({{ cs|length }})
+-
+ {% for c in cs %}
+
{{ c }}
+ {% endfor %}
+
TLS 1.3 鍵交換グループ
+{% for g in groups_list %}{{ g }}{% if not loop.last %}, {% endif %}{% endfor %}
安全性に関するすべてのログ
+既知脆弱性の判定
+| 脆弱性 | 判定 | 詳細 |
|---|---|---|
| Heartbleed | {% if hb %}{{ yn(not hb.vulnerable, '影響なし', '影響あり') }}{% else %}—{% endif %} | {% if hb %}{% if hb.heartbeat_extension %}Heartbeat advertised{% endif %}{% if hb.error %} {{ hb.error }}{% endif %}{% endif %} |
| CCS Injection | {% if ccs %}{{ yn(not ccs.vulnerable, '影響なし', '影響あり') }}{% else %}—{% endif %} | {{ (ccs or {}).get('detail','') }} |
| Secure Renegotiation | {% if renego %}{{ yn(renego.supported, '対応', '未対応') }}{% else %}—{% endif %} | {{ (renego or {}).get('detail','') }} |
| TLS_FALLBACK_SCSV | {% if scsv %}{{ yn(scsv.supported, '対応', '未対応') }}{% else %}—{% endif %} | {{ (scsv or {}).get('detail','') }} |
脆弱性に関するすべてのログ
+HTTP プロトコル対応
+| HTTP/1.1 | {% if http %}{{ yn(http.http1, '対応', '未対応') }}{% else %}—{% endif %} |
|---|---|
| HTTP/2 | {% if http %}{{ yn(http.http2, '対応', '未対応') }}{% else %}—{% endif %} |
| HTTP/3 (QUIC) | {% if http3 %}{{ yn(http3.supported, '対応', '未対応') }}{% if http3.error %} {{ http3.error }}{% endif %}{% else %}—{% endif %} |
| ALPN | {% if alpn %}{{ alpn }}{% else %}—{% endif %} |
| Server | {{ http.server }} |
| Alt-Svc | {{ http.alt_svc }} |
ハンドシェイクシミュレーション
+| クライアント | 結果 | プロトコル | 暗号 | 備考 |
|---|---|---|---|---|
| {{ s.client }} | +{{ yn(s.connected, 'OK', 'Fail') }} | +{{ s.negotiated_version or '—' }} | +{{ s.negotiated_cipher or '—' }} |
+ {{ s.error or '' }} | +
互換性に関するすべてのログ
+{{ result | tojson(indent=2) }}
+ Scanning {{ target }}
-Test ID: {{ test_id }}
waiting for queue…
-Log
-Nercone TLS Test
+{{ target }} のテストは実行中です。
+ +待機中…
+テストID: {{ test_id }}