إنتقل إلى المحتوى الرئيسي

وضع النطاق - ماسح TLS/SSL

ينطبق على:
TLS 1.2 / TLS 1.3Certificate Chain ExtractionCipher Suite & Key Exchange DetectionSubdomain Discovery (WhoisXML API)PQ Key Exchange Detectionv1.0.0
الحالة

منفّذ - متاح في v1.0.0. مبني بلغة Rust باستخدام rustls (مع خلفية ring) لمصافحة TLS وx509-parser لتحليل الشهادات.

نظرة عامة​

يجري وضع النطاق فحص TLS نشطًا لنقاط النهاية البعيدة. يتصل بمضيف مستهدف، ويجري مصافحة TLS عبر rustls، ويستخرج سلسلة الشهادات الكاملة (شهادة الخادم والوسيطة والجذر). كما يكتشف مجموعة التشفير المتفاوض عليها وخوارزمية تبادل المفاتيح. يدعم وضع النطاق اكتشاف النطاقات الفرعية عبر WhoisXML API واكتشافًا اختياريًا لتبادل مفاتيح ما بعد الكم (X25519MLKEM768 و Kyber768) من خلال التقاط الحزم.

كيف يعمل​

تدفق وضع النطاق

1

اتصال TCP

يتصل بالمضيف والمنفذ المستهدفين (الافتراضي: 443)

2

مصافحة TLS

يجري مصافحة TLS عبر rustls (TLS 1.2/1.3، خلفية ring)

3

استخراج السلسلة

يستخرج سلسلة الشهادات الكاملة: الخادم + الوسيطة + الجذر

4

اكتشاف التشفير

يحدد مجموعة التشفير المتفاوض عليها وطريقة تبادل المفاتيح

5

تحليل التشفير

يحلل الخوارزميات وأحجام المفاتيح والثغرة الكمومية

6

تسجيل المخاطر

يحسب درجات المخاطر الكمومية لكل شهادة

الميزات​

1 دعم TLS 1.2 و 1.3

يتصل باستخدام rustls مع خلفية ring، ويدعم مصافحات TLS 1.2 و TLS 1.3

2 سلسلة الشهادات الكاملة

يستخرج السلسلة الكاملة: الشهادة الطرفية (الخادم)، مراجع التصديق الوسيطة، ومرجع التصديق الجذري

3 مجموعة التشفير وتبادل المفاتيح

يكتشف مجموعة التشفير المتفاوض عليها وخوارزمية تبادل المفاتيح المستخدمة في المصافحة

4 اكتشاف النطاقات الفرعية

يكتشف النطاقات الفرعية عبر WhoisXML API لتغطية فحص أوسع (حد أقصى قابل للتهيئة)

5 اكتشاف تبادل مفاتيح PQ

التقاط حزم اختياري لاكتشاف تبادلات مفاتيح ما بعد الكم (X25519MLKEM768 و Kyber768)

6 تنسيقات إخراج متعددة

النتائج بتنسيق JSON أو YAML أو ملائم للطرفية أو HTML

الاستخدام​

فحص أساسي​

# Scan a single domain on default port 443
dke-scanner-agent domain --target example.com

# Scan with custom port
dke-scanner-agent domain --target api.example.com --port 8443

# Scan with output to file
dke-scanner-agent domain --target example.com --output scan-results.json

خيارات سطر الأوامر​

العلمالوصفالافتراضيمطلوب
--target <HOST>اسم المضيف المستهدف أو عنوان IPNoneنعم
--port <PORT>رقم المنفذ المستهدف443لا
--timeout <SECS>مهلة الاتصال بالثواني10لا
--discover-subdomainsتمكين اكتشاف النطاقات الفرعية عبر WhoisXML APIfalseلا
--subdomain-api-key <KEY>مفتاح WhoisXML API لاكتشاف النطاقات الفرعيةNoneلا (مطلوب إذا كان --discover-subdomains)
--max-subdomains <N>العدد الأقصى للنطاقات الفرعية المراد فحصها10لا
--detect-pq-kexتمكين اكتشاف تبادل مفاتيح PQ عبر التقاط الحزمfalseلا
--interface <NAME>واجهة الشبكة لالتقاط الحزم (تُستخدم مع --detect-pq-kex)Auto-detectلا
--output <FILE>مسار ملف الإخراجstdoutلا
--format <FMT>تنسيق الإخراج: json أو yaml أو terminal أو htmljsonلا

أمثلة متقدمة​

البنية​

يستخدم وضع النطاق rustls مع خلفية التشفير ring لمصافحة TLS خالصة بلغة Rust دون تبعيات OpenSSL:

  1. يبني عميل rustls (خلفية ring، TLS 1.2/1.3).
  2. يتصل بالمضيف ويجري مصافحة TLS.
  3. يستخرج سلسلة الشهادات الكاملة (الخادم، الوسيطة، الجذر).
  4. يسجّل مجموعة التشفير المتفاوض عليها وتبادل المفاتيح وإصدار البروتوكول.
  5. يكتشف اختياريًا تبادل مفاتيح ما بعد الكم (مثل X25519MLKEM768) عبر التقاط الحزم عند تعيين --detect-pq-kex.
  6. يكتشف اختياريًا النطاقات الفرعية عبر WhoisXML API ويفحص كل واحد منها.

مثال على الإخراج​

{
"scan_metadata": {
"scanner_version": "1.0.0",
"scan_mode": "domain",
"scan_date": "2025-01-30T16:20:15Z"
},
"target": {
"hostname": "api.example.com",
"port": 443,
"ip_address": "93.184.216.34"
},
"tls_info": {
"protocol_version": "TLS 1.3",
"cipher_suite": "TLS_AES_256_GCM_SHA384",
"key_exchange": "X25519"
},
"certificates": [
{
"position": 0,
"type": "leaf",
"subject": "CN=api.example.com",
"issuer": "CN=DigiCert TLS RSA SHA256 2020 CA1",
"serial": "0A1B2C3D4E5F6789",
"not_before": "2024-01-01T00:00:00Z",
"not_after": "2025-12-31T23:59:59Z",
"algorithm": "RSA",
"key_size": 2048,
"signature_algorithm": "SHA256WithRSA",
"is_self_signed": false,
"is_ca": false,
"quantum_vulnerable": true,
"risk_assessment": {
"quantum_risk_score": 8.2,
"priority": "P1",
"severity": "HIGH"
}
},
{
"position": 1,
"type": "intermediate",
"subject": "CN=DigiCert TLS RSA SHA256 2020 CA1",
"issuer": "CN=DigiCert Global Root CA",
"algorithm": "RSA",
"key_size": 2048,
"is_ca": true,
"quantum_vulnerable": true
},
{
"position": 2,
"type": "root",
"subject": "CN=DigiCert Global Root CA",
"issuer": "CN=DigiCert Global Root CA",
"algorithm": "RSA",
"key_size": 2048,
"is_self_signed": true,
"is_ca": true,
"quantum_vulnerable": true
}
]
}

القيود الرئيسية​

X25519 مقابل X25519MLKEM768

لا تستطيع مكتبة rustls لـ TLS التمييز أصليًا بين تبادلي مفاتيح X25519 وX25519MLKEM768. يظهر كلاهما كـ X25519 على مستوى واجهة rustls. لاكتشاف تبادلات مفاتيح ما بعد الكم بدقة، استخدم العلم --detect-pq-kex، الذي يمكّن تحليل التقاط الحزم على واجهة الشبكة المحددة.

اكتشاف النطاقات الفرعية يتطلب مفتاح API

اكتشاف النطاقات الفرعية مدعوم بواسطة WhoisXML API. يجب تقديم مفتاح API صالح عبر --subdomain-api-key عند استخدام --discover-subdomains. تدعم الطبقة المجانية عددًا محدودًا من استدعاءات API شهريًا.

استكشاف الأخطاء وإصلاحها​

أفضل الممارسات​