Chrome रिपोर्ट ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY HTTPS पर स्थानीय वेब सर्वर से कनेक्ट हो रही है


20

सारांश

ERR_SPDY_INADEQUATE_TRANSPORT_SECURITYजब मैं कोशिश करता हूं और HTTPS पर अपने स्थानीय वेब सर्वर से कनेक्ट होता है, तो क्रोम रिपोर्टिंग कर रहा है। मैं लगभग निश्चित हूं कि इस समस्या को मेरे हाल के विंडोज 10 उन्नयन के साथ करना है, लेकिन मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

क्या काम किया?

यहाँ घटनाओं की श्रृंखला है, मेरे साथ विंडोज 8.1 प्रो शुरू में स्थापित है:

  1. निम्नलिखित आदेश का उपयोग करके एक विश्वसनीय रूट CA के रूप में उपयोग करने के लिए स्व-हस्ताक्षरित प्रमाणपत्र बनाया गया: makecert.exe -pe -ss Root -sr LocalMachine -n "CN=local, OU=development" -r -a sha512 -e 01/01/2020
  2. विश्वसनीय रूट CA से एक एप्लिकेशन-विशिष्ट प्रमाणपत्र जेनरेट किया गया: makecert.exe -pe -ss My -sr LocalMachine -n "CN=myapp.local, OU=Development" -is Root -ir LocalMachine -in local -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -a sha512 -e 01/01/2020 -sky -eku 1.3.6.1.5.5.7.3.1
  3. उस बिंदु के HOSTSलिए एक फ़ाइल प्रविष्टि जोड़ी myapp.localगई127.0.0.1
  4. IIS 8.5 अनुप्रयोग बनाया गया है जो myapp.localडोमेन से जुड़ा है और केवल HTTPS अनुरोधों के लिए सुनता है
  5. myapp.localप्रमाणपत्र को वेब साइट पर असाइन किया गया

इस सेटअप के साथ, मुझे किसी भी प्रमाण पत्र या सुरक्षा चेतावनी के बिना क्रोम से अपनी स्थानीय वेब साइट तक पहुँचने में कोई परेशानी नहीं हुई। ब्राउज़र ने उम्मीद के मुताबिक, हरे पैडलॉक प्रदर्शित किए।

क्या काम नहीं करता

हाल ही में, मैंने विंडोज 10 में अपग्रेड किया था। मुझे उस समय पता नहीं था कि विंडोज 10 IIS 10 के साथ है, जो HTTP / 2 को सपोर्ट करता है। अब, जब मैं क्रोम के साथ अपनी स्थानीय वेब साइटों को आज़माता हूं और उन्हें एक्सेस करता हूं, तो मुझे एक ERR_SPDY_INADEQUATE_TRANSPORT_SECURITYत्रुटि मिलती है । मुझे ध्यान देना चाहिए कि एज से भेजे गए समान अनुरोध में कोई त्रुटि नहीं होती है और कनेक्शन के लिए HTTP / 2 का उपयोग करता है। सरसरी तौर पर Google खोज ने कुछ भी आशाजनक नहीं दिखाया, सिवाय संकेत के कि समस्या यह हो सकती है कि HTTP / 2 या क्रोम इस बात को लेकर सख्त है कि यह एसएसएल प्रमाणपत्रों में क्या स्वीकार करेगा।

यह सोचकर कि यह विंडोज में सक्षम सिफर स्वीट्स के साथ एक मुद्दा हो सकता है (लेकिन ऐसी चीजों में विशेषज्ञ नहीं होने के नाते), मैंने IIS क्रिप्टो का नवीनतम संस्करण डाउनलोड किया । मैंने बेस्ट प्रैक्टिस बटन पर क्लिक किया, अप्लाई पर क्लिक किया और अपनी मशीन को रीस्टार्ट किया।

IIS क्रिप्टो इन सेटिंग्स को "सर्वोत्तम प्रथाओं" के रूप में रिपोर्ट करता है:

  • सक्षम प्रोटोकॉल: टीएलएस 1.0, टीएलएस 1.1, टीएलएस 1.2
  • सक्षम साइफर: ट्रिपल डेस 168, एईएस 128/128, एईएस 256/256
  • सक्षम हैश: एमडी 5, एसएचए, एसएचए 256, एसएचए 384, एसएचए 512
  • सक्षम प्रमुख एक्सचेंज: डिफी-हेलमैन, पीकेसीएस, ईसीडीएच
  • एसएसएल सिफर सुइट ऑर्डर:

    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P284
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P284
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P284
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
    TLS_RSA_WITH_AES_256_GCM_SHA384
    TLS_RSA_WITH_AES_128_GCM_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA
    TLS_RSA_WITH_AES_128_CBC_SHA256
    TLS_RSA_WITH_AES_128_CBC_SHA
    TLS_RSA_WITH_3DES_EDE_BC_SHA

मैं यह भी जोड़ूंगा कि जो ब्राउज़र एप्लिकेशन मैं विकसित कर रहा हूं, उसे विंडोज एक्सपी से उपयोग करने की आवश्यकता नहीं है। मुझे पता है कि Windows XP के नए प्रोटोकॉल का समर्थन नहीं करने के बारे में कुछ समस्याएं हैं।

HTTPS बातचीत के बारे में विस्तृत जानकारी

मैंने HTTPS बातचीत को बाधित करने के लिए फिडलर का उपयोग करने का निर्णय लिया। यहां बताया गया है कि फ़िडलर ने अनुरोध के बारे में क्या बताया:

Version: 3.3 (TLS/1.2)
Random: 6B 47 6D 2B BC AE 00 F1 1D 41 57 7C 46 DB 35 19 D7 EF A9 2B B1 D0 81 1D 35 0D 75 7E 4C 05 14 B0
"Time": 2/1/1993 9:53:15 AM
SessionID: 98 2F 00 00 15 E7 C5 70 12 70 CD A8 D5 C7 D4 4D ED D8 1F 42 F9 A8 2C E6 67 13 AD C0 47 C1 EA 04
Extensions: 
    server_name myapp.local
    extended_master_secret  empty
    SessionTicket   empty
    signature_algs  sha512_rsa, sha512_ecdsa, sha384_rsa, sha384_ecdsa, sha256_rsa, sha256_ecdsa, sha224_rsa, sha224_ecdsa, sha1_rsa, sha1_ecdsa
    status_request  OCSP - Implicit Responder
    NextProtocolNego    empty
    SignedCertTimestamp (RFC6962)   empty
    ALPN        http/1.1, spdy/3.1, h2-14, h2
    channel_id(GoogleDraft) empty
    ec_point_formats    uncompressed [0x0]
    elliptic_curves secp256r1 [0x17], secp384r1 [0x18]
Ciphers: 
    [C02B]  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    [C02F]  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    [009E]  TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
    [CC14]  TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
    [CC13]  TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
    [CC15]  TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
    [C00A]  TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
    [C014]  TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
    [0039]  TLS_DHE_RSA_WITH_AES_256_SHA
    [C009]  TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
    [C013]  TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
    [0033]  TLS_DHE_RSA_WITH_AES_128_SHA
    [009C]  TLS_RSA_WITH_AES_128_GCM_SHA256
    [0035]  TLS_RSA_AES_256_SHA
    [002F]  TLS_RSA_AES_128_SHA
    [000A]  SSL_RSA_WITH_3DES_EDE_SHA
    [00FF]  TLS_EMPTY_RENEGOTIATION_INFO_SCSV

Compression: 
    [00]    NO_COMPRESSION

और प्रतिक्रिया:

Version: 3.3 (TLS/1.2)
SessionID:  98 2F 00 00 15 E7 C5 70 12 70 CD A8 D5 C7 D4 4D ED D8 1F 42 F9 A8 2C E6 67 13 AD C0 47 C1 EA 04
Random:     55 C6 8D BF 78 72 88 41 34 BD B4 B8 DA ED D3 C6 20 5C 46 D6 5A 81 BD 6B FC 36 23 0B 15 21 5C F6
Cipher:     TLS_RSA_WITH_AES_128_GCM_SHA256 [0x009C]
CompressionSuite:   NO_COMPRESSION [0x00]
Extensions:
        ALPN        h2
        0x0017      empty
        renegotiation_info  00
        server_name empty

क्या काम कर रहा है?

हकान Lindqvist के जवाब के आधार पर, और बहुत विस्तृत और जाहिरा तौर पर अच्छी तरह से-से शोध जवाब यहाँ , मैं निम्नलिखित सेटिंग्स, जो क्रोम त्रुटि सफाया साथ आईआईएस क्रिप्टो पुन: कॉन्फ़िगर:

  • सक्षम प्रोटोकॉल: टीएलएस 1.0, टीएलएस 2.0, टीएलएस 3.0
  • सक्षम साइफर: एईएस 128/128, एईएस 256/256
  • सक्षम हैश: SHA, SHA 256, SHA 384, SHA 512
  • सक्षम प्रमुख एक्सचेंज: डिफी-हेलमैन, पीकेसीएस, ईसीडीएच
  • एसएसएल सिफर सुइट ऑर्डर:

    TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521
    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
    TLS_RSA_WITH_AES_256_GCM_SHA384
    TLS_RSA_WITH_AES_128_GCM_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA256
    TLS_RSA_WITH_AES_128_CBC_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA
    TLS_RSA_WITH_AES_128_CBC_SHA


इससे पहले कि कोई स्पष्ट कहे: हाँ, मुझे पता makecert.exeहै कि पदावनत हो गया है। मैं इसे केवल इस तरह के विकास परिदृश्यों के लिए उपयोग करता हूं क्योंकि यह सबसे आसान विकल्प है जो [काम करता है]।
नाथनअल्डनश्री

सक्षम नहीं सिफर लेकिन ssl / tls संस्करण जो सक्षम है। क्या आपको tls v1.0 या निम्न सक्षम मिला है?
Drifter104

मैंने उन सेटिंग्स को नियंत्रित करने के लिए IIS क्रिप्टो के साथ जो कुछ भी किया था, उसे शामिल करने के लिए मैंने सवाल को अपडेट किया। क्या आप जानते हैं कि क्या सेटिंग्स HTTP / 2 और Chrome के लिए बहुत अधिक अनुमत हैं?
नाथनअल्डनसर

stackoverflow.com/questions/31746620/… मदद कर सकता है। ब्राउज़र में स्पष्ट रूप से अक्षम करना, जाने का तरीका है
Drifter104

1
संस्करण 2.0 में IIS क्रिप्टो "बेस्ट प्रैक्टिसेस" ने मेरे लिए यह त्रुटि तय की। मैंने आपके द्वारा निर्दिष्ट सुइट ऑर्डर का उपयोग करने की कोशिश की, लेकिन कोई प्रभाव नहीं पड़ा। जाहिरा तौर पर यह विंडोज़ या IIS क्रिप्टो में तय किया गया है। :)
अहम्

जवाबों:


21

Https://http2.github.io/http2-spec/#rfc.section.9.2.2 के अनुसार Http / 2 आवश्यकताएं :

9.2.2 टीएलएस 1.2 सिफर सूट

TLS 1.2 पर HTTP / 2 की तैनाती 1.2 किसी भी सिफर सुइट्स का उपयोग नहीं करते जो सिफर सूट ब्लैक लिस्ट ( परिशिष्ट A ) में सूचीबद्ध हैं ।

एंडपॉइंट्स MAY एक कनेक्शन त्रुटि (धारा 5.4.1) टाइप करने के लिए चुनते हैं INADEQUATE_SECURITY यदि काली सूची में से किसी एक साइफर ने बातचीत की है। एक तैनाती जो एक काले-सूचीबद्ध सिफर सूट जोखिम का उपयोग करने का विकल्प चुनती है, जब तक कि संभावित साथियों के सेट को उस सिफर सूट को स्वीकार करने के लिए नहीं जाना जाता।

कार्यान्वयन आवश्यक रूप से काली सूची में नहीं आने वाले सिफर सुइट की बातचीत की प्रतिक्रिया में यह त्रुटि उत्पन्न नहीं करता है। नतीजतन, जब ग्राहक एक सिफर सूट पेश करते हैं जो काली सूची में नहीं है, तो उन्हें HTTP / 2 के साथ उस सिफर सूट का उपयोग करने के लिए तैयार रहना होगा।

काली सूची में सिफर सुइट शामिल है जिसे टीएलएस 1.2 अनिवार्य बनाता है, जिसका अर्थ है कि टीएलएस 1.2 तैनाती में अनुमत सिफर सुइट्स के गैर-प्रतिच्छेदक सेट हो सकते हैं। इस समस्या से बचने के लिए TLS हैंडशेक विफलताओं के कारण, HTTP / 2 की तैनाती जो TLS 1.2 MUST समर्थन TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 [TLS-ECDHE] का उपयोग P-256 अण्डाकार वक्र [FIPS186] के साथ करती है।

ध्यान दें कि क्लाइंट साइपर सुइट्स के समर्थन को विज्ञापित कर सकते हैं जो HTTP / 2 का समर्थन नहीं करने वाले सर्वर से कनेक्शन के लिए अनुमति देने के लिए काली सूची में हैं। यह सर्वरों को HTTP / 1.1 एक सिफर सुइट के साथ चयन करने की अनुमति देता है जो HTTP / 2 काली सूची में है। हालाँकि, इसका परिणाम HTTP / 2 में ब्लैक-लिस्टेड सिफर सूट के साथ हो सकता है यदि एप्लिकेशन प्रोटोकॉल और सिफर सूट स्वतंत्र रूप से चुने गए हैं।


आपका बातचीत किया हुआ सिफर TLS_RSA_WITH_AES_128_GCM_SHA256उपर्युक्त (और जुड़ा हुआ) Http / 2 ब्लैकलिस्ट में है।

मेरा मानना ​​है कि आप उपरोक्त आवश्यकताओं को पूरा करने के लिए अपने सिफर स्वीट्स (ऑर्डरिंग?) को समायोजित करना चाहेंगे। हो सकता है कि सूची में सबसे ऊपर TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256NIST P-256अण्डाकार वक्र ( TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256विंडोज पर पहचाना गया) या कम से कम ब्लैक लिस्ट में शामिल होने से पहले रखा गया हो?


मैं तुरंत यह कोशिश करूंगा और आपको बता दूंगा कि यह कैसे होता है। विस्तृत उत्तर के लिए धन्यवाद! :) ईमानदारी से, ऐसा लगता है कि यह सिफर सूट मुद्दा HTTP / 2 का उपयोग उसी समय कर सकता है जैसे HTTP / 1.1 वास्तव में मुश्किल है, यदि असंभव नहीं है, जब तक कि ब्राउज़र विसंगतियों के आसपास काम करने की गारंटी नहीं देते हैं। IPv4 / IPv6, कोई भी?
नाथनअल्डनशहर

मैंने IIS क्रिप्टो की "बेस्ट प्रैक्टिस" सिफर सूट सूची की तुलना ब्लैकलिस्ट के खिलाफ की। मैंने जो पाया वह यह है कि सभी सबसे अच्छे अभ्यास वाले TLS_RSAसाइफर ब्लैक लिस्ट में हैं। मैंने उन सभी को निष्क्रिय कर दिया और रिबूट किया। हालाँकि, अब मैं किसी भी ब्राउज़र के साथ अपनी स्थानीय वेब साइट पर एक सुरक्षित कनेक्शन स्थापित नहीं कर सकता । मैं अभी मिलता हूं ERR_CONNECTION_RESET। यह प्रमाण पत्र के साथ खुद करने के लिए कुछ भी हो सकता है?
नाथन एल्डनशहर

@NathanAldenSr मुझे नहीं लगता कि आपको ब्लैकलिस्ट किए गए सिपहसालारों को हटाने की आवश्यकता है (वे HTTP / 1.x क्लाइंट्स के लिए अनुकूलता प्रयोजनों के लिए उपयोगी हो सकते हैं) जब तक कि गैर-ब्लैकलिस्ट किए गए सिपहर्स की उच्च प्राथमिकता नहीं होती है। विशेष रूप से एक ने उल्लेख किया है कि सभी HTTP / 2 की तैनाती MUST सपोर्ट ( TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) है।
हाकन लिंडक्विस्ट

1
शुरुआती बिंदु के लिए धन्यवाद। मैंने अपने जवाब को अपडेट किया है कि मेरे लिए क्या काम किया है।
नेथनअल्डनशेयर

1
ध्यान दें, HTTP / 2 कल्पना कहती है कि यह TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 है , जो P-256 अण्डाकार वक्र [FIPS186] के साथ है, जिसका अर्थ है: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256विंडोज़ के लिए स्ट्रिंग ।
बार्ट वेरकोइजेन

2

आईआईएस में HTTP / 2 को अस्थायी रूप से अक्षम करने के लिए बनाए गए कुछ PowerShell मैंने यहां दिए हैं:

Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\HTTP\Parameters -Name EnableHttp2Tls -Value 0 -Type DWord
Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\HTTP\Parameters -Name EnableHttp2Cleartext -Value 0 -Type DWord

मैं इसे एक जवाब दे रहा हूं क्योंकि HTTP / 2 को अक्षम करने से समस्या का एकमात्र "समाधान" प्रतीत होता है। हालाँकि, मैं इसे स्वीकार नहीं करूँगा, क्योंकि मैं वास्तव में IIS 10 में HTTP / 2 का उपयोग सभी ब्राउज़रों के साथ मज़बूती से करना चाहूंगा।


Http / 2 स्पेक्स को पूरा करने के लिए अपने सिफर स्वीट्स (संभवतः सिर्फ ऑर्डरिंग) को समायोजित करके समस्या को ठीक से हल करना चाहिए। (अलग से उत्तर देखें)
Håkan Lindqvist

3
ऐसा लगता है कि इन परिवर्तनों को प्रभावी करने के लिए आपको Windows को पुनरारंभ करना होगा। बस फोन iisresetकरना मेरे लिए ट्रिक नहीं था।
सेबेस्टियन क्रिम्समेंस्की

-1

बस एक उचित सीए से एक प्रमाण पत्र प्राप्त करें, मुफ्त वाले ( StartSSL ) हैं और इसे एक प्राप्त करने में अधिक समय नहीं लगता है।

एक उचित प्रमाण पत्र का उपयोग करते समय मुझे विंडोज 10 पर IIS 10 और क्रोम के साथ HTTP / 2 का उपयोग करने में कोई समस्या नहीं थी।


1
यह दुर्भाग्य से मेरे लिए काम नहीं करेगा। मेरे पास स्वचालित स्क्रिप्ट्स हैं जो स्थानीय और विकास दोनों परिवेशों के लिए इन प्रमाण पत्रों को उत्पन्न करती हैं, और प्रत्येक डेवलपर के कार्य केंद्र को उनकी आवश्यकता होती है। इसके अतिरिक्त, मैं चाहता हूं कि नए प्रमाणपत्र प्राप्त करने के लिए लचीलापन बिना किसी तृतीय-पक्ष पर वापस जाने के होस्ट नामों को बदलने में सक्षम हो।
नाथनअल्डनशहर

@ नथनअल्डनसेर - मैं समझता हूँ। पूरी तरह से स्क्रिप्टेड प्रक्रिया के लिए हम एक स्थानीय आंतरिक सीए का उपयोग कर रहे हैं। यह जानना अच्छा होगा कि क्या makecert.exeस्व-निर्मित सेर्ट्स समस्या हैं। मैंने कभी भी makecert.exe का उपयोग नहीं किया, मैंने हमेशा सोचा कि एक स्थानीय सीए एक बहुत क्लीनर समाधान है।
पीटर हैन्डफोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.