Chrome รายงานว่า ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY เชื่อมต่อกับเว็บเซิร์ฟเวอร์ในพื้นที่ผ่าน HTTPS


20

สรุป

Chrome รายงานERR_SPDY_INADEQUATE_TRANSPORT_SECURITYเมื่อฉันพยายามเชื่อมต่อกับเว็บเซิร์ฟเวอร์ในพื้นที่ของฉันผ่าน HTTPS ฉันเกือบจะแน่ใจว่าปัญหานี้เกี่ยวข้องกับการอัพเกรด Windows 10 ล่าสุดของฉัน แต่ฉันไม่ทราบวิธีการแก้ไข

ทำงานอะไร

นี่คือเหตุการณ์ที่เกิดขึ้นโดยที่ฉันติดตั้ง Windows 8.1 Pro ตอนเริ่มต้น:

  1. สร้างใบรับรองที่ลงนามเองเพื่อใช้เป็น root 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ใบรับรองให้กับเว็บไซต์

ด้วยการตั้งค่านี้ฉันไม่มีปัญหาในการเข้าถึงเว็บไซต์ท้องถิ่นของฉันจาก Chrome โดยไม่มีใบรับรองหรือคำเตือนความปลอดภัย เบราว์เซอร์แสดงกุญแจสีเขียวตามที่คาดไว้

อะไรไม่ทำงาน

เมื่อเร็ว ๆ นี้ฉันอัพเกรดเป็น Windows 10 ฉันไม่ทราบว่าในขณะที่ Windows 10 มาพร้อมกับ IIS 10 ซึ่งรองรับ HTTP / 2 ตอนนี้เมื่อฉันลองและเข้าถึงเว็บไซต์ในพื้นที่ด้วย Chrome ฉันได้รับERR_SPDY_INADEQUATE_TRANSPORT_SECURITYข้อผิดพลาด ฉันควรทราบว่าคำขอเดียวกันที่ส่งมาจาก Edge ไม่ส่งผลให้เกิดข้อผิดพลาดและใช้ HTTP / 2 สำหรับการเชื่อมต่อ การค้นหาโดย Google คร่าวๆไม่ได้ทำให้เกิดสัญญาอะไรขึ้นนอกจากจะบอกใบ้ว่าปัญหาอาจเป็นได้ว่า HTTP / 2 หรือ Chrome นั้นเข้มงวดกับสิ่งที่ ciphers จะยอมรับในใบรับรอง SSL

คิดว่าอาจเป็นปัญหากับชุดรหัสเปิดใช้งานใน Windows (แต่ไม่ได้เป็นผู้เชี่ยวชาญในเรื่องดังกล่าว) ฉันดาวน์โหลดเวอร์ชันล่าสุดของ IIS Crypto ฉันคลิกปุ่มวิธีปฏิบัติที่ดีที่สุดคลิกนำไปใช้และรีสตาร์ทเครื่อง

IIS Crypto รายงานการตั้งค่าเหล่านี้เป็น "แนวทางปฏิบัติที่ดีที่สุด":

  • โปรโตคอลที่เปิดใช้งาน: TLS 1.0, TLS 1.1, TLS 1.2
  • ciphers ที่เปิดใช้งาน: Triple DES 168, AES 128/128, AES 256/256
  • แฮชที่เปิดใช้งาน: MD5, SHA, SHA 256, SHA 384, SHA 512
  • การแลกเปลี่ยนคีย์ที่เปิดใช้งาน: Diffie-Hellman, PKCS, ECDH
  • ลำดับชุดรหัส SSL:

    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_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA
    TLS_RSA_WITH_AES_256_CBC_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA


    TLS_RSA_WITH_3DES_EDE_CBC_SHA

ฉันจะเพิ่มด้วยว่าแอปพลิเคชันเบราว์เซอร์ที่ฉันกำลังพัฒนาไม่จำเป็นต้องใช้งานได้จาก Windows XP ฉันรู้ว่ามีปัญหาบางอย่างเกี่ยวกับ Windows XP ที่ไม่รองรับโปรโตคอลใหม่

ข้อมูลรายละเอียดเกี่ยวกับการเจรจา HTTPS

ฉันตัดสินใจใช้พู้ทำเล่นเพื่อสกัดกั้นการเจรจา HTTPS นี่คือสิ่งที่ Fiddler รายงานเกี่ยวกับคำขอ:

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

ทำงานอะไร

จากคำตอบของHåkan Lindqvist และคำตอบที่ละเอียดและวิจัยอย่างละเอียดที่นี่ฉันกำหนด IIS Crypto ใหม่ด้วยการตั้งค่าต่อไปนี้ซึ่งตัดข้อผิดพลาดของ Chrome:

  • โปรโตคอลที่เปิดใช้งาน: TLS 1.0, TLS 2.0, TLS 3.0
  • ยันต์ที่เปิดใช้งาน: AES 128/128, AES 256/256
  • แฮชที่เปิดใช้งาน: SHA, SHA 256, SHA 384, SHA 512
  • การแลกเปลี่ยนคีย์ที่เปิดใช้งาน: Diffie-Hellman, PKCS, ECDH
  • ลำดับชุดรหัส SSL:

    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_128_CBC_SHA_P521
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256

    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เลิกใช้แล้ว ฉันใช้เพื่อการพัฒนาสถานการณ์เช่นนี้เท่านั้นเพราะเป็นตัวเลือกที่ง่ายที่สุดที่ [เคยใช้หรือไม่] ใช้งานได้
NathanAldenSr

อาจไม่ใช่รหัสลับ แต่เป็นรุ่น ssl / tls ที่เปิดใช้งาน คุณได้เปิดใช้งาน tls v1.0 หรือต่ำกว่า?
Drifter104

ฉันอัพเดตคำถามเพื่อรวมสิ่งที่ฉันทำกับ IIS Crypto เพื่อควบคุมการตั้งค่าเหล่านั้น คุณรู้หรือไม่ว่าการตั้งค่าอนุญาตสำหรับ HTTP / 2 และ Chrome มากเกินไป?
NathanAldenSr

stackoverflow.com/questions/31746620/…อาจช่วยได้ เห็นได้ชัดว่าการปิดการใช้งาน spdy ในเบราว์เซอร์เป็นวิธีการที่จะไป
Drifter104

1
IIS Crypto "Best Practices" ในเวอร์ชัน 2.0 แก้ไขข้อผิดพลาดนี้ให้ฉัน ฉันลองใช้คำสั่งชุดที่คุณระบุ แต่ไม่มีผล เห็นได้ชัดว่าได้รับการแก้ไขใน Windows หรือ IIS Crypto ที่ไหนสักแห่งระหว่างทาง :)
ahwm

คำตอบ:


21

ข้อกำหนด Http / 2 ตามhttps://http2.github.io/http2-spec/#rfc.section.9.2.2 :

9.2.2 TLS 1.2 Cipher Suites

การปรับใช้ HTTP / 2 ผ่าน TLS 1.2 ไม่ควรใช้ชุดรหัสใด ๆ ที่ระบุไว้ในรายการชุดรหัสชุดดำ ( ภาคผนวก A )

ปลายทางอาจเลือกที่จะสร้างข้อผิดพลาดในการเชื่อมต่อ (ส่วน 5.4.1) ประเภท INADEQUATE_SECURITY หากหนึ่งในห้องชุดรหัสจากรายการสีดำมีการเจรจา การปรับใช้ที่เลือกใช้ชุดรหัสลับมีความเสี่ยงที่ก่อให้เกิดข้อผิดพลาดในการเชื่อมต่อเว้นแต่ว่าชุดของเพียร์ที่อาจเกิดขึ้นนั้นเป็นที่รู้จักกันเพื่อยอมรับชุดรหัสนั้น

การใช้งานต้องไม่สร้างข้อผิดพลาดนี้ในการตอบสนองต่อการเจรจาของชุดรหัสที่ไม่ได้อยู่ในบัญชีดำ ดังนั้นเมื่อลูกค้าเสนอชุดรหัสที่ไม่ได้อยู่ในบัญชีดำพวกเขาจะต้องเตรียมพร้อมที่จะใช้ชุดรหัสนั้นด้วย HTTP / 2

บัญชีดำรวมถึงชุดรหัสที่ TLS 1.2 กำหนดให้บังคับซึ่งหมายความว่าการปรับใช้ TLS 1.2 อาจมีชุดรหัสตัวเลขที่อนุญาตไม่ให้ตัดกัน เพื่อหลีกเลี่ยงปัญหานี้ที่ก่อให้เกิดความล้มเหลวของการจับมือ TLS การปรับใช้ HTTP / 2 ที่ใช้ TLS 1.2 ต้องสนับสนุน 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_SHA256ด้วยP-256เส้นโค้งรูปไข่NIST (ระบุว่าTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256บน Windows) ที่ด้านบนของรายการหรืออย่างน้อยก็ก่อนที่จะมีอะไรรวมอยู่ในบัญชีดำ


ฉันจะลองทันทีและแจ้งให้คุณทราบว่ามันเป็นอย่างไร ขอบคุณสำหรับคำตอบอย่างละเอียด! :) จริง ๆ แล้วดูเหมือนว่าปัญหาชุดรหัสนี้อาจทำให้การใช้ HTTP / 2 ในเวลาเดียวกันเป็น HTTP / 1.1 จริงๆหากไม่เป็นไปไม่ได้จนกว่าเบราว์เซอร์จะรับประกันการทำงานที่ไม่สอดคล้องกัน IPv4 / IPv6 ทุกคน?
NathanAldenSr

ฉันเปรียบเทียบรายการชุดรหัส "ปฏิบัติที่ดีที่สุด" ของ IIS Crypto กับบัญชีดำ สิ่งที่ฉันพบคือTLS_RSAชุดรหัสการปฏิบัติที่ดีที่สุดทั้งหมดอยู่ในบัญชีดำ ฉันปิดการใช้งานพวกเขาทั้งหมดและรีบูต อย่างไรก็ตามตอนนี้ฉันไม่สามารถสร้างการเชื่อมต่อที่ปลอดภัยไปยังเว็บไซต์ท้องถิ่นของฉันด้วยเบราว์เซอร์ใด ๆ ERR_CONNECTION_RESETฉันเพิ่งได้รับ สิ่งนี้เกี่ยวข้องกับใบรับรองด้วยตัวเองได้ไหม
NathanAldenSr

@NathanAldenSr ฉันไม่คิดว่าคุณจะต้องลบ ciphers ที่ขึ้นบัญชีดำ (มันอาจจะมีประโยชน์สำหรับการใช้งานร่วมกันได้กับไคลเอนต์ HTTP / 1.x) ตราบใดที่ ciphers ที่ไม่ใช่บัญชีดำมีลำดับความสำคัญสูงกว่า โดยเฉพาะที่กล่าวถึงว่าการปรับใช้ HTTP / 2 ทั้งหมดต้องสนับสนุน ( TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
Håkan Lindqvist

1
ขอบคุณสำหรับจุดเริ่มต้น ฉันได้อัปเดตคำตอบเพื่อแสดงสิ่งที่ใช้ได้ผลสำหรับฉัน
NathanAldenSr

1
หมายเหตุข้อมูลจำเพาะ HTTP / 2 ระบุว่าเป็น TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ที่มีเส้นโค้งรูปไข่ P-256 [FIPS186] หมายถึงสตริง: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256สำหรับ Windows
Bart Verkoeijen

2

นี่คือ PowerShell บางตัวที่ฉันสร้างขึ้นเพื่อปิดใช้งาน HTTP / 2 ใน IIS ชั่วคราว:

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 ดูเหมือนจะเป็น "ทางออก" เดียวสำหรับปัญหา ฉันจะไม่ยอมรับ แต่เนื่องจากฉันต้องการใช้ HTTP / 2 ใน IIS 10 อย่างน่าเชื่อถือกับเบราว์เซอร์ทั้งหมด


การปรับชุดรหัสของคุณ (อาจเป็นเพียงการสั่งซื้อ) เพื่อให้ตรงตามข้อกำหนด Http / 2 ควรแก้ไขปัญหาได้อย่างถูกต้อง (ดูคำตอบแยกต่างหาก)
Håkan Lindqvist

3
ดูเหมือนว่าคุณต้องรีสตาร์ท Windowsเพื่อให้การเปลี่ยนแปลงเหล่านี้มีผล แค่โทรมาiisresetก็ไม่ได้หลอกให้ฉัน
เซบาสเตียน Krysmanski

-1

เพิ่งได้รับใบรับรองจาก CA ที่เหมาะสมมีใบรับรองฟรี ( StartSSL ) และใช้เวลานานกว่านั้นในการรับใบรับรอง

เมื่อใช้ใบรับรองที่เหมาะสมฉันไม่มีปัญหากับการใช้ IIS 10 บน Windows 10 และ HTTP / 2 กับ Chrome


1
มันไม่ได้ผลสำหรับฉัน ฉันมีสคริปต์อัตโนมัติที่สร้างใบรับรองเหล่านี้สำหรับทั้งในท้องถิ่นและสภาพแวดล้อมการพัฒนาและเวิร์กสเตชันของนักพัฒนาทุกคนต้องการพวกเขา นอกจากนี้ฉันต้องการความยืดหยุ่นในการเปลี่ยนชื่อโฮสต์โดยไม่ต้องกลับไปที่บุคคลที่สามเพื่อรับใบรับรองใหม่
NathanAldenSr

@NathanAldenSr - ฉันเข้าใจ สำหรับกระบวนการที่เขียนสคริปต์อย่างสมบูรณ์เรากำลังใช้ CA ภายในเครื่อง มันจะเป็นการดีถ้ารู้ว่าการmakecert.exeสร้างด้วยตนเองนั้นเป็นปัญหาหรือไม่ ฉันไม่เคยใช้ makecert.exe ฉันคิดเสมอว่า CA ท้องถิ่นเป็นทางออกที่สะอาดกว่ามาก
ปีเตอร์ Hahndorf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.