문제의 원인은 이것입니다. 어떤 이유로, 나는 최근에 Nodejs의 C ++ 모듈을 작성한 다음 JS에서 호출했습니다. 네트워크 통신은 자연스럽게 SSL과 분리 할 수 없으므로 OpenSSL의 라이브러리에 링크해야합니다.
원래 기대는 사용자가 OpenSSL 런타임 라이브러리를 설치해야하며 C ++ 모듈은 OpenSSL을 통해 동적으로 링크하여 라이브러리를 실행할 것이라는 것이 었습니다.
이 OpensSL 기능이 작동하지 않는다는 것을 알 때까지 처음에는 모든 것이 꽤 좋아 보였습니다.
pkcs7_sign ()
pkcs7_sign ()
우리는 다음을 발견했습니다.
C ++ 모듈이 OpenSSL 라이브러리에 동적으로 연결되어 있으면 컴파일에 아무런 문제가 없습니다. 그러나 작업이 발생하면 PKCS7_SIGN 기호에서 찾을 수없는 오류가 발생합니다.
C ++ 모듈이 OpenSSL 라이브러리에 정적으로 연결되어있는 경우 컴파일에 문제가 없지만 실행 중에는 실행할 때이 기능에 대한 호출은 효과가 없으며이 기능의 반환 값은 0입니다. 문서에 따르면 오류가 발생했지만 OpenSSL의 함수 err_get_error를 사용하여 오류 코드도 사용하지 않습니다. 오류 코드가 없습니다.
이것은 Linux에서 사실입니다. Mac에서는 어떻습니까? Mac으로 시도해 Mac에 문제가 없다는 것을 알았습니다. 그래서 이것이 Nodejs의 버그 일 수 있다고 생각했습니다. 그런 다음 Nodejs에 가서 버그를보고했습니다 : [https://github.com/joyent/node/issues/8026]]]
동시에 Google에서 OpenSSL에 연결되는 Nodejs와 유사한 키워드를 검색했습니다.
다음과 같은 몇 가지 기사를 찾았습니다.
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--libssl-and-crypto-libraries
https://github.com/robhawkes/node-extension/issues/1
검색을 통해 Nodejs 자체가 OpenSSL 라이브러리를 사용한 것으로 나타났습니다. Nodejs의 자체 암호화 모듈은 OpenSSL LIB를 사용하여 구현 된 것으로 추측됩니다. 이것은 모든 최신 OpenSSL 소스 코드를 포함하는 Nodejs의 소스 코드에서 찾을 수 있습니다.
위의 첫 번째 기사를 쓴 잘 생긴 남자 : 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
노드는 이유를 설명합니다.
노드가 자체적으로 컴파일되면 사용하지 않는 기호를 지우므로 실행할 때 기호를 찾을 수 없습니다. 그래서 그들은 버그를 수정하고 모든 기호를 유지했습니다. 이로 인해 노드가 400k 더 크게 발생했습니다.
그의 빠른 답장에 대한 노드 덕분에 노드의 활동 수준에 감탄해야합니다. 좋다.