سبب الأمر هو هذا. لسبب ما ، كنت أكتب وحدة C ++ Nodejs مؤخرًا ثم أسميها على JS. لا يمكن فصل اتصال الشبكة بشكل طبيعي عن SSL ، لذلك من الضروري الارتباط بمكتبة OpenSSL.
كان توقعنا الأصلي هو أن المستخدم يحتاج إلى تثبيت مكتبة وقت تشغيل OpenSSL ، ثم تترابط وحدة C ++ الخاصة بنا بشكل ديناميكي إلى OpenSSL So Library So Library.
بدا كل شيء جيدًا في البداية حتى اكتشفنا أن وظيفة OpenSSL لا تعمل:
PKCS7_SIGN ()
PKCS7_SIGN ()
وجدنا:
إذا كانت وحدة C ++ لدينا مرتبطة ديناميكيًا بمكتبة OpenSSL ، فلا توجد مشكلة في التجميع. ومع ذلك ، في حالة حدوث العملية ، لا يمكن العثور على خطأ في رمز PKCS7_Sign.
إذا كانت وحدة C ++ لدينا مرتبطة بشكل ثابت بمكتبة OpenSSL ، فلا توجد مشكلة في التجميع ، ولكن عند التشغيل ، لا يكون للدعوة إلى هذه الوظيفة أي تأثير ، وكانت قيمة إرجاع هذه الوظيفة هي 0. وفقًا للوثيقة ، حدث خطأ ، ولكن باستخدام وظيفة OpenSSL ERR_ERTROR للحصول على رمز الخطأ هو أيضًا 0. إنه يعني أنه لا يوجد رمز خطأ.
هذا صحيح على Linux ، ماذا عن Mac؟ جربته مع Mac ووجدت أنه لا توجد مشكلة مع Mac. لذلك اعتقدت أن هذا قد يكون خطأ في nodejs. ثم ذهبت إلى Nodejs وأبلغت أنه خطأ: [https://github.com/joyent/node/issues/8026/20101]
في الوقت نفسه ، بحثت عن كلمات رئيسية مشابهة لـ 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
https://github.com/robhawkes/node-extension/issues/1
من خلال البحث ، وجدنا أن Nodejs نفسها استخدمت أيضًا مكتبة OpenSSL. من المتوقع أن يتم تنفيذ وحدة التشفير الخاصة بـ NodeJS باستخدام OpenSSL LIB. يمكن العثور على هذا من الكود المصدري لـ NodeJS ، والذي يحتوي على جميع رمز مصدر OpenSSL الأخير.
الرجل الوسيم الذي كتب المقال الأول أعلاه: https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl هو مطور Nodejs.
الاستنتاج الأساسي:
يستخدم Nodejs OpenSSL نفسه
قبل Nodejs 0.6 ، تم ربط Nodejs ديناميكيًا بمكتبة OpenSSL. كانت الإصدارات اللاحقة مرتبطة بشكل ثابت.
في هذا الوقت ، وجدت أن العقدة ردت على علة بلدي: https://github.com/joyent/node/issues/8026
تشرح العقدة لماذا:
بعد أن تجمع العقدة نفسها ، يقوم بمسح الرموز التي لا تستخدمها ، لذلك لا يمكننا العثور على الرموز عند التشغيل. لذلك قاموا بإصلاح الخطأ واحتفظوا بجميع الرموز. تسبب هذا في أن تكون العقدة أكبر 400 ألف.
بفضل Node على رده السريع ، يجب أن أعجب بمستوى نشاط Node. يحب.