สาเหตุของเรื่องนี้คือ ด้วยเหตุผลบางอย่างฉันได้เขียนโมดูล C ++ ของ NodeJS เมื่อเร็ว ๆ นี้แล้วเรียกมันว่าบน JS การสื่อสารเครือข่ายแยกออกจาก SSL โดยธรรมชาติดังนั้นจึงจำเป็นต้องเชื่อมโยงไปยังห้องสมุดของ OpenSSL
ความคาดหวังดั้งเดิมของเราคือผู้ใช้จำเป็นต้องติดตั้งไลบรารี OpenSSL Runtime จากนั้นโมดูล C ++ ของเราจะเชื่อมโยงไปยัง OpenSSL เพื่อให้ไลบรารีทำงาน
ทุกอย่างดูดีในตอนแรกจนกว่าเราจะพบว่าฟังก์ชั่น OpenSSL นี้ใช้งานไม่ได้:
PKCS7_SIGN ()
PKCS7_SIGN ()
เราพบ:
หากโมดูล C ++ ของเราเชื่อมโยงกับไลบรารี OpenSSL แบบไดนามิกไม่มีปัญหาในการรวบรวม อย่างไรก็ตามหากการดำเนินการเกิดขึ้นข้อผิดพลาดที่ไม่สามารถพบได้ในสัญลักษณ์ PKCS7_SIGN
หากโมดูล C ++ ของเราเชื่อมโยงอย่างคงที่กับไลบรารี OpenSSL ไม่มีปัญหากับการรวบรวม แต่เมื่อเรียกใช้การเรียกไปยังฟังก์ชั่นนี้จะไม่มีผลและค่าการส่งคืนของฟังก์ชั่นนี้คือ 0 ตามเอกสารข้อผิดพลาดเกิดขึ้น
สิ่งนี้เป็นจริงบน Linux แล้ว Mac ล่ะ? ฉันลองใช้กับ Mac และพบว่าไม่มีปัญหากับ Mac ดังนั้นฉันคิดว่านี่อาจเป็นข้อผิดพลาดใน nodejs จากนั้นฉันไปที่ NodeJS และรายงานว่ามันเป็นข้อผิดพลาด: [https://github.com/joyent/node/issues/8026 เหมือนกัน [1]
ในเวลาเดียวกันฉันค้นหาคำหลักที่คล้ายกับ NodeJS ที่เชื่อมโยงไปยัง OpenSSL บน Google
พบบทความบางอย่างเช่นนี้:
https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl
https://github.com/joyent/node/issues/3915
http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraries
https://github.com/robhawkes/node-extension/issues/1
จากการค้นหาเราพบว่า NodeJS นั้นใช้ไลบรารี OpenSSL ด้วย มีการคาดการณ์ว่าโมดูล crypto ของ NodeJS นั้นใช้งานโดยใช้ OpenSSL LIB สามารถพบได้จากซอร์สโค้ดของ NodeJs ซึ่งมีซอร์สโค้ด OpenSSL ล่าสุดทั้งหมด
ผู้ชายที่หล่อเหลาผู้เขียนบทความแรกด้านบน: https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl เป็นผู้พัฒนา NodeJS
บทสรุปพื้นฐาน:
nodejs ใช้ openssl เอง
ก่อนที่ NodeJS 0.6 จะมีการเชื่อมโยงแบบไดนามิกกับไลบรารี OpenSSL แบบไดนามิก เวอร์ชันที่ตามมามีการเชื่อมโยงแบบคงที่
ในเวลานี้ฉันพบว่าโหนดได้ตอบข้อผิดพลาดของฉัน: https://github.com/joyent/node/issues/8026
โหนดอธิบายว่าทำไม:
หลังจากที่โหนดรวบรวมตัวเองมันจะล้างสัญลักษณ์ที่ไม่ได้ใช้ดังนั้นเราจึงไม่พบสัญลักษณ์เมื่อทำงาน ดังนั้นพวกเขาจึงแก้ไขข้อผิดพลาดและเก็บสัญลักษณ์ทั้งหมดไว้ สิ่งนี้ทำให้โหนดมีขนาดใหญ่ขึ้น 400k
ขอบคุณ Node สำหรับการตอบกลับอย่างรวดเร็วของเขาฉันต้องชื่นชมระดับกิจกรรมของ Node ชอบ.