ข้อยกเว้น PayPal API OAuth2 I/O: เพียร์ไม่ได้รับการรับรองความถูกต้อง

เป็นเวลาหลายเดือนแล้วที่รูทีน OAuth2 ของฉันทำงานได้อย่างสมบูรณ์แบบ รูทีน OAuth2 สร้างโทเค็นใหม่เพื่อให้ฉันสามารถดำเนินการ API ได้

ทันใดนั้นเมื่อสัปดาห์ที่แล้ว ฉันเริ่มได้รับข้อผิดพลาดต่อไปนี้:

Charset     [empty string]
ErrorDetail     I/O Exception: peer not authenticated
Filecontent     Connection Failure
Header  [empty string]
Mimetype    Unable to determine MIME type of file.
Responseheader  
struct [empty]
Statuscode  Connection Failure. Status code unavailable.
Text    YES 

ฉันใช้ Coldfusion 10 และไม่ได้เปลี่ยนแปลงสิ่งใดในสภาพแวดล้อมการทดสอบของฉันเป็นเวลาหลายเดือนแล้ว ดังนั้นการเปลี่ยนแปลงจะต้องมาจากจุดสิ้นสุดของ PayPal

ฉันใช้การโทร http ต่อไปนี้:

<cfset clientid = "***">
<cfset secret = "***">

<cfhttp method="post" url="https://api.sandbox.paypal.com/v1/oauth2/token" result="result">
<cfhttpparam type="header" name="Content_Type" value="application/json">
<cfhttpparam type="formfield" name="grant_type" value="client_credentials">
<cfhttpparam type="header" name="Authorization" value="Basic #ToBase64(clientid & ":" & secret)#">
</cfhttp>

ใครสามารถช่วยฉันแก้ปัญหานี้ได้อย่างไร


person Charles Robertson    schedule 01.02.2016    source แหล่งที่มา
comment
อัปเดต/นำเข้าใบรับรอง PayPal ลงในที่เก็บคีย์ของ JVM ใบรับรองล่าสุดตั้งแต่วันที่ 2 กันยายน 2558   -  person Alex    schedule 02.02.2016
comment
@Alex ขอบคุณสำหรับคำแนะนำ ฉันนำเข้าทั้งใบรับรองรูท G5 ของ Verisign Class 3 2048 บิตล่าสุดและใบรับรองจุดสิ้นสุดแซนด์บ็อกซ์ที่เกี่ยวข้องไปยัง cacerts โดยใช้ keytool แม้ว่าฉันไม่แน่ใจว่าจำเป็นต้องนำเข้าอย่างหลังก็ตาม ฉันรีสตาร์ท CF และฉันยังคงได้รับข้อผิดพลาดเดิม ฉันใช้เวลาหลายวันกับเรื่องนี้ และรู้สึกโกรธเล็กน้อยที่ PayPal เพิ่งทำการเปลี่ยนแปลงเหล่านี้โดยไม่ได้แจ้งให้นักพัฒนาทราบจริงๆ ฉันคิดว่าฉันไม่ใช่นักพัฒนา CF เพียงคนเดียวที่ใช้ PayPal RESTFUL API   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex ฉันเปลี่ยนชื่อนามแฝง Verisign จริง ๆ เพราะมีใบรับรองที่มีนามแฝงเดียวกันอยู่แล้ว บางทีฉันควรลบ Verisign Class 3 G5 เก่าออกและตั้งชื่อใบรับรองใหม่ด้วยนามแฝงเก่า คุณคิดว่าสิ่งนี้จะสร้างความแตกต่างหรือไม่?   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex คุณช่วยบอก URL ของใบรับรองที่คุณกำลังพูดถึงให้ฉันได้ไหมในกรณีที่ฉันนำเข้าผิด   -  person Charles Robertson    schedule 03.02.2016
comment
คุณได้ติดตั้งการอัปเดต ColdFusion ล่าสุดหรือไม่ เพิ่มการรองรับ SNI ซึ่งอาจเป็นปัญหากับเซิร์ฟเวอร์ PayPal นอกเหนือจากนั้น: ตรวจสอบให้แน่ใจว่าได้นำเข้าใบรับรองทั้งหมด (รวมถึงเชน) บนโดเมนย่อยที่คุณส่งคำขอไป   -  person Alex    schedule 03.02.2016
comment
@Alex ฉันใช้ CF10 แต่ฉันอยู่ในการอัปเดต 12 จาก 17 ฉันส่งคำขอไปยัง api.sandbox เท่านั้น paypal.com ฉันนำเข้าใบรับรอง verisign 2048 บิตล่าสุด และฉันคิดว่าสิ่งนี้ได้รับการอัปเดตเมื่อเร็ว ๆ นี้โดย PayPal แม้ว่าชื่อใบรับรองจะเหมือนกันตั้งแต่ปี 2549: knowledge.verisign.com/support/mpki-for-ssl-support/ ฉันจะอัปเดต CF10 เป็นอัปเดต 17 และแจ้งให้คุณทราบว่าเกิดอะไรขึ้น?   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex น่าเสียดายที่ฉันไม่สามารถอัปเดต CF10 นอกเหนือจากการอัปเดต 12 จาก 17 ได้เนื่องจากฉันได้รับข้อยกเว้น 'ลายเซ็นที่ไม่ถูกต้อง' เมื่อพยายามติดตั้งการอัปเดต ฉันจะลบ CF10 และติดตั้ง CF11 ฉันใช้ Railo บนเซิร์ฟเวอร์ที่ใช้งานจริง ดังนั้นฉันจึงสามารถอัปเดตได้โดยไม่มีปัญหาใดๆ สิ่งที่น่าสนใจคือรีโมท ACF ในพื้นที่และ Railo ของฉันมีปัญหา PayPal เดียวกันในเวลาเดียวกัน ฉันคิดว่านี่หมายความว่ามันเป็นปัญหาใบรับรอง เว้นแต่ Railo จะประสบปัญหา SNI เช่นกัน ซึ่งจะเป็นเหตุการณ์ร่วมกันครั้งใหญ่...   -  person Charles Robertson    schedule 03.02.2016
comment
@Alex เมื่อฉันติดตั้ง CF11 แล้ว โทเค็น PayPal ก็ออกโดยไม่มีปัญหา แน่นอนว่า CF11 cacert และผู้ให้บริการด้านความปลอดภัยสามารถใช้งานร่วมกันได้ แต่ขอบคุณสำหรับความช่วยเหลือของคุณ...   -  person Charles Robertson    schedule 03.02.2016


คำตอบ (2)


โอเค ฉันมีปัญหาเดียวกันทุกประการกับการเชื่อมต่อกับ PayPal REST API ใหม่ และสาเหตุของข้อผิดพลาดคือการโยกย้ายจากใบรับรอง Verisign G2 Root (ซึ่ง PayPal ไม่รองรับอีกต่อไป) และการย้ายไปยังอัลกอริทึม SHA-256 และใบรับรองที่ลงนาม Verisign G5

ความสับสนเกิดขึ้นจากการที่ Coldfusion 10 และ Coldfusion 11 มี cacert ใน ColdFusion Truststore อยู่แล้ว แล้วทำไมมันถึงยังใช้งานไม่ได้?

หลังจากพยายามค้นหามาหลายชั่วโมง ฉันพบว่าปัญหาใบรับรองอยู่ในโฟลเดอร์ JRE ไม่ใช่ ColdFusion นั่นทำให้ฉันต้องอัปเกรด ColdFusion อย่างรวดเร็วเพื่อให้ทำงานบน Java JDK 1.8_101 เวอร์ชันล่าสุด (เซิร์ฟเวอร์ทดสอบของฉันทำงานบน JVM 1.7 และเซิร์ฟเวอร์ที่ใช้งานจริงอยู่ที่ 1.8_25 (ดังนั้นฉันจึงอัปเกรดทั้งคู่และโค้ดทำงาน (ซึ่งคล้ายกับ Charles รหัสในโพสต์ต้นฉบับ)

ดังนั้นนี่คือขั้นตอนง่ายๆ:

  1. อัปเกรด ColdFusion เป็นอัปเดตล่าสุดจากผู้ดูแลระบบ ColdFusion
  2. ติดตั้ง Java JDK ล่าสุด (ปัจจุบันคือ 1.8_101) และจำไว้ว่าคุณติดตั้งที่ไหน
  3. กลับไปที่ ColdFusion Administrator และไปที่ Java และ JVM ภายใต้การตั้งค่าเซิร์ฟเวอร์ และชี้ JVM ไปที่โฟลเดอร์ JRE ใน JDK ใหม่ เช่น /{JDK_home}/Contents/Home/jre โฟลเดอร์ จากนั้นรีสตาร์ท ColdFusion

PayPal oAuth2.0 จะกลับมาใช้งานได้อีกครั้ง! (อย่างน้อยมันก็ทำเพื่อฉัน) ฉันหวังว่าสิ่งนี้จะช่วยให้ใครบางคนประหยัดเวลาหลายชั่วโมงแห่งความหงุดหงิด และมั่นใจได้ว่า PayPal REST API ล่าสุดสามารถทำงานร่วมกับ ColdFusion ได้ (แม้ว่าพวกเขาจะไม่ได้ให้ตัวอย่างไว้ แต่ฉันกำลังดำเนินการส่งไปยัง PayPal ผ่านทาง Github เร็วๆ นี้)

person James Martin    schedule 30.09.2016
comment
ขอบคุณสำหรับคำตอบนี้ ฉันแน่ใจว่าคุณพูดถูกเกี่ยวกับเวอร์ชัน JDK แต่การติดตั้ง CF11 เวอร์ชันล่าสุดใหม่ทั้งหมดดูเหมือนจะแก้ไขปัญหาให้ฉันได้ - person Charles Robertson; 01.10.2016
comment
ใช่ การติดตั้งใหม่ทั้งหมดสามารถแก้ไขปัญหาได้ แต่คุณสูญเสียการกำหนดค่าและการตั้งค่าทั้งหมด ดังนั้นการอัปเกรด JDK หรือ Server JRE จึงเป็นวิธีแก้ปัญหาสำหรับ ColdFusion 10 หรือ 11 ที่ใช้งานจริง - person James Martin; 02.10.2016

เพียงเพื่อให้ทุกคนทราบ เมื่อฉันติดตั้ง CF11 แล้ว โทเค็น PayPal ก็ออกได้โดยไม่มีปัญหา แน่นอนว่า CF11 cacert และผู้ให้บริการด้านความปลอดภัยสามารถใช้งานร่วมกันได้ ตอนนี้ฉันต้องพยายามแยกแยะ Railo ซึ่งอาจยากกว่านี้เพราะฉันใช้ Railo 4 ฉันจะลองอัปเดต Railo เป็นเวอร์ชัน 4+ ล่าสุด...

อัปเดต:

เพื่อให้สิ่งนี้ใช้งานได้กับ Railo คุณต้องทำการติดตั้ง Lucee 4.5 [ตัวตายตัวแทน Railo 4.2] ใหม่ทั้งหมด อย่าอัปเดตจาก RAILO ไปเป็น LUCEE โดยการย้าย .JARs ฉันขอย้ำอีกครั้งว่าคุณต้องทำการติดตั้ง Lucee 4.5 ใหม่ทั้งหมด:

http://lucee.org/downloads.html

ฉันพบปัญหากับอะแดปเตอร์ BonCode หากคุณได้รับข้อผิดพลาดต่อไปนี้จาก IIS:

IIS Handler "BonCode-Tomcat-CFM-Handler" มีโมดูลที่ไม่ดี

ตรวจสอบกลุ่มแอปพลิเคชัน IIS ของคุณ ในกลุ่มแอปพลิเคชัน คลิกที่ "การตั้งค่าพื้นฐาน" บนแผงทางด้านขวา หากเวอร์ชัน .NET คือ 2.0.0 ให้เปลี่ยนเป็น 4.X และบันทึกการเปลี่ยนแปลง

เคล็ดลับ:

ตรวจสอบให้แน่ใจว่าไฟล์ web.config ของคุณมีการตั้งค่าต่อไปนี้เพื่อดูข้อผิดพลาดนี้:

<configuration>
   <system.webServer>
      <httpErrors errorMode="Detailed"/>
   </system.webServer>
</configuration>

สิ่งนี้จะช่วยคุณประหยัดเวลาได้หนึ่งสัปดาห์ :)

ขอให้โชคดีทุกคน!

person Charles Robertson    schedule 03.02.2016
comment
เราใช้ PayPal กับ CF 10 ได้อย่างสมบูรณ์แบบ ดังนั้นจึงอาจเป็นปัญหาเกี่ยวกับสภาพแวดล้อมมากกว่าที่นี่ ยังไงก็ตาม คุณอาจอัพเกรดการติดตั้ง Railo ของคุณเป็น Lucee (ผู้สืบทอดของ Railo) ได้เช่นกัน - person Alex; 03.02.2016
comment
@อเล็กซ์ใช่ ฉันกำลังอัปเกรด Railo 4.2 เป็น Lucee 4.5 พรุ่งนี้ หวังว่านี่จะช่วยแก้ปัญหา PayPal บนเซิร์ฟเวอร์ระยะไกลของฉันได้ ฉันคิดว่าคุณถูกต้องเกี่ยวกับ CF10 เพียงแต่ว่าฉันไม่สามารถติดตั้งการอัปเดตได้ คุณพูดถึงแล้ว ทางเลือกเดียวของฉันคือติดตั้ง CF11... - person Charles Robertson; 04.02.2016
comment
รายชื่อผู้ให้บริการความปลอดภัย CF11 นั้นครอบคลุมมากกว่าเวอร์ชัน CF10 [อัปเดต 12] มาก ฉันคิดว่า CF10 อัปเดต 13 - 17 อาจเพิ่มบางรายการลงในรายการนี้ รองรับ SHA-2 [2048] ได้ดีขึ้น ฉันค่อนข้างแน่ใจว่าใบรับรองของฉันมั่นคง... - person Charles Robertson; 04.02.2016
comment
@Alex ฉันประสบปัญหาใหญ่ ฉันได้อัปเดต Railo 4.2 เป็น Lucee 4.5 แล้ว [วิธีง่ายมาก :)] ฉันได้อัปเดตใบรับรองที่เกี่ยวข้องทั้งหมดโดยใช้ keytool เป็น cacerts แต่ฉันได้รับข้อผิดพลาดต่อไปนี้ [โดยใช้แอตทริบิวต์ Thrownonerror cfhttp]: Cause string javax.net.ssl.SSLHandshakeException url string api.sandbox.paypal.com/v1/oauth2/token สตริงรายละเอียด สตริง ErrorCode 0 สตริง Extended_Info สตริง ExtendedInfo สตริงข้อความ ได้รับการแจ้งเตือนร้ายแรง: handshake_failure สตริง StackTrace ได้รับการแจ้งเตือนร้ายแรง: handshake_failure ที่ sun.security ssl.Alerts.getSSLException(Alerts.jav - person Charles Robertson; 04.02.2016
comment
ช่วยด้วยยยยยยยยยยยยย ธุรกิจของฉันกำลังจมลงเพราะปัญหาบ้าๆ นี้ PayPal ตระหนักหรือไม่ว่าพวกเขากำลังยุ่งกับการดำรงชีวิตของผู้คน? ฉันอาจต้องซื้อใบอนุญาต CF11 Enterprise สำหรับเซิร์ฟเวอร์ที่ใช้งานจริงของฉัน เนื่องจากฉันรู้ว่ามันใช้งานได้กับ ACF - person Charles Robertson; 04.02.2016
comment
@Alex ลิงก์นี้ดูเหมือนจะแนะนำว่าฉันต้องอัปเดตไฟล์ .jar บางไฟล์ใน JRE\lib\security: stackoverflow.com/questions/30350120/ คุณรู้หรือไม่ว่าไฟล์ .jar ใดและฉันจะได้รับการอัปเดตจากที่ไหน ฉันสามารถคัดลอกมาจากไดเร็กทอรี ACF11 JRE ได้ แต่ดูเหมือนว่าจะมีความเสี่ยง ??? - person Charles Robertson; 04.02.2016
comment
ดูเหมือนว่าบางสิ่งใน JRE ของคุณจะใช้งานไม่ได้/ล้าสมัย พิจารณาการติดตั้ง Lucee ใหม่ทั้งหมด คุณอาจต้องการตรวจสอบช่อง Lucee บน cfml.slack.com เพื่อขอความช่วยเหลือเพิ่มเติม - person Alex; 05.02.2016
comment
@อเล็กซ์ ขอบคุณ ฉันพบว่าฉันอาจจำเป็นต้องคัดลอกไฟล์ JSafeJCE .jar ไปยัง Lucee/jdk/jre/lib/security นี่คือเวอร์ชันความแข็งแกร่งไร้ขีดจำกัด เป็นไลบรารีเดียวกับที่ ACF11 ใช้ หากไม่ได้ผล ฉันจะทำการติดตั้ง Lucee ใหม่ทั้งหมดตามที่แนะนำ ฉันได้ดูรายชื่อผู้ให้บริการความปลอดภัย Lucee แล้ว และ JSafeJCE ไม่ได้อยู่ในรายการนี้ ใน ACF11 จะเป็นผู้ให้บริการเริ่มต้นและแก้ไขปัญหานี้ภายในเครื่อง การต่อสู้ดำเนินต่อไป... - person Charles Robertson; 05.02.2016
comment
shilpikhariwal.com/2012/04/ - person Charles Robertson; 05.02.2016
comment
ca.com/us/ support/ca-support-online/product-content/ แม้ว่าฉันไม่คิดว่ามันจำเป็นจริงๆ ในการแก้ไขไฟล์ java.security ตามที่บทความนี้แนะนำ ฉันได้ดูไฟล์ ACF11 java.security แล้วและไม่มีรายการ JSafeJCE แต่เป็นผู้ให้บริการความปลอดภัยเริ่มต้นเมื่ออ่านรายการโดยทางโปรแกรม ‹cfset objSecurity = createObject(“java”, “java.security.Security”) /› ‹cfdump var=#objSecurity.getProviders()# /› เว้นแต่ว่า ACF11 จะมีไฟล์ java.security แบบกำหนดเองซ่อนอยู่ที่ไหนสักแห่ง... - person Charles Robertson; 05.02.2016
comment
@อเล็กซ์ จีเนียส ขอบคุณสำหรับคำแนะนำ. การติดตั้ง Lucee 4.5 ใหม่ทั้งหมดทำให้ PayPal สามารถจับมือกันอีกครั้ง โปรดทราบว่าฉันมีเวลามากในการพยายามให้ BonCode Adapter ทำงานร่วมกับ IIS ฉันต้องตรวจสอบ IIS Application Pools ของฉัน ใน Application Pool ฉันคลิกที่การตั้งค่าพื้นฐานบนแผงทางด้านขวา และเปลี่ยน .NET Version จาก 2.0.0 เปลี่ยนเป็น 4.X นอกจากนี้ฉันยังต้องเพิ่ม BonCode Handler Mapping อื่นสำหรับ '*.cfml' แต่สุดท้ายทุกอย่างก็ดี ขอขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ ฉันจะเพิ่มบิตนี้ในคำตอบข้างต้น ... - person Charles Robertson; 05.02.2016