問題の原因はこれです。何らかの理由で、私は最近NodeJSのC ++モジュールを書いており、JSでそれを呼び出しました。ネットワーク通信は自然にSSLと分離できないため、OpenSSLのライブラリにリンクする必要があります。
当初の期待は、ユーザーがOpenSSLランタイムライブラリをインストールする必要があることでした。その後、C ++モジュールはOpenSSL SOライブラリに動的にリンクして実行します。
このopenSSL関数が機能しないことがわかったまで、最初はすべてがかなり良く見えました。
pkcs7_sign()
pkcs7_sign()
私たちは見つけました:
C ++モジュールがOpenSSLライブラリに動的にリンクされている場合、コンパイルに問題はありません。ただし、操作が発生した場合、PKCS7_SIGNシンボルでは見られないエラーが発生します。
C ++モジュールがOpenSSLライブラリに静的にリンクされている場合、コンパイルに問題はありませんが、実行中にこの関数への呼び出しは効果がなく、この関数の返品値は0です。ドキュメントによると、エラーが発生しましたが、OpenSSLの関数ERR_GET_ERRORを使用してエラーコードも0です。エラーコードもありません。
これは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-static-libssl-and-crypto-libraries
https://github.com/robhawkes/node-extension/issues/1
検索を通じて、nodejs自体がOpenSSLライブラリも使用していることがわかりました。 NodeJS自身のCryptoモジュールも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大きくなりました。
Nodeの迅速な返信をありがとう、Nodeのアクティビティレベルを賞賛する必要があります。のように。