La cause de la question est la suivante. Pour une raison quelconque, j'ai rédigé récemment le module C ++ de Nodejs, puis je l'ai appelé sur JS. La communication réseau est naturellement inséparable à partir de SSL, il est donc nécessaire de créer un lien vers la bibliothèque d'OpenSSL.
Notre attente d'origine était que l'utilisateur doit installer la bibliothèque d'exécution OpenSSL, puis notre module C ++ se lie dynamiquement vers la bibliothèque OpenSSL SO pour s'exécuter.
Tout avait l'air plutôt bien au début jusqu'à ce que nous découvrions que cette fonction ouvre ne fonctionne pas:
Pkcs7_sign ()
Pkcs7_sign ()
Nous avons trouvé:
Si notre module C ++ est lié dynamiquement à la bibliothèque OpenSSL, il n'y a aucun problème à la compilation. Cependant, si l'opération se produit, une erreur qui ne peut être trouvée dans le symbole PKCS7_Sign.
Si notre module C ++ est lié statiquement à la bibliothèque OpenSSL, il n'y a aucun problème avec la compilation, mais lors de l'exécution, l'appel vers cette fonction n'a aucun effet, et la valeur de retour de cette fonction est 0. Selon le document, une erreur s'est produite, mais que l'utilisation de la fonction d'OpenSSL ERR_GET_ERROR pour obtenir le code d'erreur est également 0. Il n'y a pas de code d'erreur.
C'est vrai sur Linux, qu'en est-il sur Mac? Je l'ai essayé avec Mac et j'ai découvert qu'il n'y avait aucun problème avec Mac. J'ai donc pensé que cela pourrait être un bug dans Nodejs. Ensuite, je suis allé à Nodejs et je l'ai signalé un bug: [https://github.com/joyent/node/issues/8026.
Dans le même temps, j'ai recherché des mots clés similaires à NodeJS liant à OpenSSL sur Google.
J'ai trouvé quelques articles comme celui-ci:
https://github.com/tootallnate/node-gyp/wiki/linking-to-opensensl
https://github.com/joyent/node/issues/3915
http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraires
https://github.com/robhawkes/node-extension/issues/1
Grâce à la recherche, nous avons constaté que NodeJS lui-même a également utilisé la bibliothèque OpenSSL. Il est supposé que le propre module cryptographique de NodeJS est également implémenté à l'aide d'OpenSSL LIB. Cela peut être trouvé à partir du code source de NodeJS, qui contient tous les derniers code source OpenSSL.
Le beau gars qui a écrit le premier article ci-dessus: https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl est le développeur de Nodejs.
Conclusion de base:
Nodejs utilise OpenSSL lui-même
Avant NodeJS 0.6, NodeJS était lié dynamiquement à la bibliothèque OpenSSL. Les versions suivantes ont été liées statiquement.
À ce moment, j'ai trouvé que le nœud avait répondu à mon bug: https://github.com/joyent/node/issues/8026
Node explique pourquoi:
Une fois que le nœud se compila, il efface les symboles qu'il n'utilise pas, nous ne pouvons donc pas trouver les symboles lors de l'exécution. Ils ont donc corrigé le bug et ont conservé tous les symboles. Cela a fait que le nœud est à 400k plus grand.
Grâce à Node pour sa réponse rapide, je dois admirer le niveau d'activité de Node. Comme.