รับ javax.net.ssl.SSLException: ข้อมูล MAC ไม่ตรงกันขณะสร้างการเชื่อมต่อ TLS

![ป้อนคำอธิบายรูปภาพที่นี่][1] ![ป้อนคำอธิบายรูปภาพที่นี่][2] ![ป้อนคำอธิบายรูปภาพที่นี่][3]

ฉันกำลังพยายามสร้างการเชื่อมต่อที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ ไคลเอนต์รองรับ TLSv1.2 และเซิร์ฟเวอร์รองรับ TLSv1.0 แต่ได้รับข้อยกเว้น "javax.net.ssl.SSLException: ข้อมูล MAC ไม่ตรงกัน"

here is the printstacktrace :

    javax.net.ssl.SSLException: MAC data does not match.
            at com.rsa.sslj.x.aJ.b(Unknown Source)
            at com.rsa.sslj.x.aJ.a(Unknown Source)
            at com.rsa.sslj.x.aJ.a(Unknown Source)
            at com.rsa.sslj.x.aU.c(Unknown Source)
            at com.rsa.sslj.x.aU.a(Unknown Source)
            at com.rsa.sslj.x.aU.h(Unknown Source)
            at com.rsa.sslj.x.cI.startHandshake(Unknown Source)
            at com.sun.jndi.ldap.ext.StartTlsResponseImpl.startHandshake(StartTlsResponseImpl.java:361)
            at com.sun.jndi.ldap.ext.StartTlsResponseImpl.negotiate(StartTlsResponseImpl.java:225)
            at com.cisco.ccm.admin.utilities.LdapUtil.validateHost(LdapUtil.java:383)
            at com.cisco.ccm.admin.utilities.LdapUtil.validateHost(LdapUtil.java:289)

ฉันตรวจสอบโค้ดของฉันว่าโปรโตคอลที่เปิดใช้งานคือ SSLv3, TLSv1 , TLSv1.1 และ TLSv1.2 โดยใช้เมธอด getEnabledProtocols() ฉันได้อ่านใน TLSv1.2 rfc ว่าหากเซิร์ฟเวอร์รองรับ TLS เวอร์ชันต่ำกว่าแล้วไคลเอ็นต์ ไคลเอ็นต์ควรเจรจากับ TLS เวอร์ชันต่ำกว่า

แต่ในกรณีของฉัน ฉันได้รับข้อยกเว้นข้างต้น (ทำไม ??... สิ่งนี้ไม่ควรเกิดขึ้นและเจรจากับ TLSv1)

หมายเหตุ: นอกจากนี้ หากฉันตั้งค่าโปรโตคอลที่เปิดใช้งานเป็น TLSv1 เท่านั้น ฉันจะสามารถสร้างการเชื่อมต่อ TLS ได้

กรุณาช่วยฉันออกไป. ขอบคุณ

  [1]: http://i.stack.imgur.com/RC4Ha.jpg
  [2]: http://i.stack.imgur.com/rjXjq.jpg
  [3]: http://i.stack.imgur.com/WIRvF.jpg

person Vivone    schedule 12.09.2013    source แหล่งที่มา
comment
ฉันเดาว่าการเจรจาไม่ทำงานอย่างถูกต้อง แต่ฉันไม่สามารถแสดงความคิดเห็นได้มากกว่านี้เนื่องจากจะต้องจับภาพหน้าจอของ pcap ด้วย wireshark และเห็นข้อความ ServerHello ถูกส่งโดยเซิร์ฟเวอร์   -  person Narendra Pathai    schedule 12.09.2013
comment
มีความแตกต่างอย่างมากในวิธีการทำงานของการเข้ารหัสและถอดรหัสใน TLS1.2 เช่นเดียวกับ TLS1.0 ดังนั้นคุณจึงได้รับข้อผิดพลาดนี้   -  person Narendra Pathai    schedule 12.09.2013
comment
ฉันได้แนบภาพหน้าจอของ pcap สวัสดีเซิร์ฟเวอร์ และสวัสดีลูกค้า นอกจากนี้ ฉันได้อ่านมาแล้วว่า TLS 1.2 สามารถใช้งานร่วมกับรุ่นก่อนหน้าได้ ดังนั้นจึงควรเจรจา...ใช่ไหม   -  person Vivone    schedule 12.09.2013
comment
@Narendra Pathai อีกหนึ่งคำถาม ...mac data ไม่ตรงกันและ bad_mac_record มีข้อผิดพลาดเหมือนกันหรือต่างกัน ?   -  person Vivone    schedule 12.09.2013
comment
ทั้งสองเป็น AFAIK เดียวกัน เป็นไปได้เฉพาะเมื่อกระบวนการถอดรหัสถอดรหัสค่าที่ไม่ถูกต้องบางส่วนและพบว่า MAC ไม่ถูกต้อง   -  person Narendra Pathai    schedule 12.09.2013
comment
ฉันได้เห็น pcaps แล้ว และคุณยังสามารถแบ่งปันรายละเอียดของใบรับรอง การแลกเปลี่ยนคีย์ไคลเอ็นต์โดยขยายได้หรือไม่ ฉันแค่อยากจะตรวจสอบการตอบกลับของลูกค้าต่อ Server Hello   -  person Narendra Pathai    schedule 13.09.2013
comment
คุณใช้บริการประเภทใด? คุณต้องการส่วนขยายการเข้ารหัส Java หรือไม่?   -  person jwilleke    schedule 13.09.2013


คำตอบ (1)


เป็นปัญหาของเวอร์ชันที่เข้ากันไม่ได้อย่างแน่นอน สิ่งหนึ่งที่แน่นอนก็คือ TLS เป็นชื่อใหม่สำหรับ SSL กล่าวคือโปรโตคอล SSL เป็นเวอร์ชัน 3.0; TLS 1.0 คือ "SSL 3.1" เวอร์ชัน TLS ที่กำหนดไว้ในปัจจุบัน ได้แก่ TLS 1.1 และ 1.2

นอกจากนี้ ลิงก์ wiki ต่อไปนี้ (http://en.wikipedia.org/wiki/Transport_Layer_Security) แสดงให้เห็นว่า

All TLS versions were further refined in RFC 6176 in March 2011 removing their backward compatibility with SSL such that TLS sessions will never negotiate the use of Secure Sockets Layer (SSL) version 2.0.

นอกจากนี้ ระหว่าง TLS และ SSL นั้น MAC/HMAC จะแตกต่างกัน (TLS ใช้ HMAC ในขณะที่ SSL ใช้ HMAC เวอร์ชันก่อนหน้า) ฉันสงสัยว่าโค้ดของคุณยังคงเลือก SSL ให้เรา คุณช่วยกรุณาปิดการใช้งาน SSL แล้วลองอีกครั้งได้ไหม?

person Gyanendra Dwivedi    schedule 12.09.2013
comment
แต่ฉันใช้ tlsv1.2 และ tlsv1 กรุณาค้นหาภาพ pcap - person Vivone; 12.09.2013