La causa del asunto es esta. Por alguna razón, he estado escribiendo el módulo C ++ de NodeJS recientemente y luego lo llamé en JS. La comunicación de red es naturalmente inseparable de SSL, por lo que es necesario vincular a la biblioteca de OpenSSL.
Nuestra expectativa original era que el usuario necesita instalar la biblioteca de tiempo de ejecución OpenSSL, y luego nuestro módulo C ++ se vincula dinámicamente a la biblioteca OpenSSL para ejecutarse.
Todo se veía bastante bien al principio hasta que descubrimos que esta función OpenSSL no funciona:
Pkcs7_sign ()
Pkcs7_sign ()
Encontramos:
Si nuestro módulo C ++ está vinculado dinámicamente a la biblioteca OpenSSL, no hay ningún problema en la compilación. Sin embargo, si se produce la operación, un error que no se puede encontrar en el símbolo PKCS7_SIGN.
Si nuestro módulo C ++ está estáticamente vinculado a la biblioteca OpenSSL, no hay ningún problema con la compilación, pero al ejecutar, la llamada a esta función no tiene efecto, y el valor de retorno de esta función es 0. Según el documento, se produjo un error, pero utilizando la función de OpenSSL err_get_error para obtener el código de error también es 0. Significa que no hay código de error.
Esto es cierto en Linux, ¿qué pasa en Mac? Lo probé con Mac y descubrí que no había problema con Mac. Así que pensé que esto podría ser un error en NodeJS. Luego fui a NodeJs y lo informé como un error: [https://github.com/joyent/node/issues/8026font>§]
Al mismo tiempo, busqué palabras clave similares a NodeJs que vinculan a OpenSSL en Google.
Encontré algunos artículos como este:
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
A través de la búsqueda, encontramos que NodeJS también usaba la biblioteca OpenSSL. Se especula que el propio módulo criptográfico de NodeJS también se implementa utilizando OpenSSL lib. Esto se puede encontrar en el código fuente de NodeJS, que contiene todo el último código fuente de OpenSSL.
El hombre guapo que escribió el primer artículo anterior: https://github.com/tootallnate/node-gyp/wiki/linking-to-openssl es el desarrollador de Nodejs.
Conclusión básica:
NodeJs usa OpenSSL en sí
Antes de NodeJS 0.6, NodeJS estaba vinculado dinámicamente a la biblioteca OpenSSL. Las versiones posteriores estaban estáticamente vinculadas.
En este momento, descubrí que Node había respondido a mi error: https://github.com/joyent/node/issues/8026
El nodo explica por qué:
Después de que el nodo se compila, borra los símbolos que no usa, por lo que no podemos encontrar los símbolos cuando se ejecutan. Entonces solucionaron el error y conservaron todos los símbolos. Esto hizo que el nodo fuera 400k más grande.
Gracias a Node por su rápida respuesta, tengo que admirar el nivel de actividad de Node. Como.