Die Ursache der Sache ist das. Aus irgendeinem Grund habe ich kürzlich das C ++ - Modul von NodeJS geschrieben und es dann auf JS genannt. Die Netzwerkkommunikation ist von SSL von Natur aus untrennbar untrennbar mit der OpenSSL -Bibliothek verknüpft.
Unsere ursprüngliche Erwartung war, dass der Benutzer die OpenSSL -Laufzeitbibliothek installieren muss und unser C ++ - Modul dann dynamisch mit der OpenSSSL -Bibliothek verknüpft wird.
Zuerst sah alles ziemlich gut aus, bis wir herausgefunden haben, dass diese OpenSSL -Funktion nicht funktioniert:
Pkcs7_sign ()
Pkcs7_sign ()
Wir fanden:
Wenn unser C ++ - Modul dynamisch mit der OpenSSL -Bibliothek verknüpft ist, gibt es kein Problem beim Kompilieren. Wenn der Vorgang jedoch auftritt, kann ein Fehler im Symbol PKCS7_IGN nicht gefunden werden.
Wenn unser C ++ - Modul statisch mit der OpenSSL -Bibliothek verknüpft ist, gibt es kein Problem mit der Kompilierung, aber beim Ausführen hat der Aufruf dieser Funktion keinen Einfluss, und der Rückgabewert dieser Funktion ist 0. Gemäß dem Dokument ist ein Fehler aufgetreten, aber es gibt keinen Fehler, der OpenSSL -Funktion err_get_einror erhält, ist auch 0.
Dies gilt unter Linux, was ist mit MAC? Ich habe es mit Mac ausprobiert und festgestellt, dass es kein Problem mit Mac gab. Also dachte ich, dass dies ein Fehler in Nodejs sein könnte. Dann ging ich zu NodeJs und meldete es einen Fehler: [https://github.com/joyent/node/issues/8026][1]
Gleichzeitig habe ich nach Schlüsselwörtern gesucht, die NodeJs ähnlich sind, die mit OpenSSL bei Google verknüpft sind.
Fand ein paar Artikel wie diese:
https://github.com/tootallnate/node-gyp/wiki/linking-to-opensl
https://github.com/joyent/node/issues/3915
http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-library
https://github.com/robhawkes/node-eutsion/issues/1
Durch die Suche stellten wir fest, dass NodeJs selbst auch die OpenSSL -Bibliothek verwendete. Es wird spekuliert, dass das eigene Krypto -Modul von NodeJS auch mit OpenSSL Lib implementiert wird. Dies ist aus dem Quellcode von NodeJS zu finden, der den neuesten OpenSSL -Quellcode enthält.
Der gutaussehende Typ, der den ersten Artikel oben geschrieben hat: https://github.com/tootallnate/node-gyp/wiki/linking-to-opensl ist der Entwickler von NodeJs.
Grundlegende Schlussfolgerung:
Nodejs verwendet OpenSSL selbst
Vor NodeJS 0.6 wurde NodeJS dynamisch mit der OpenSSL -Bibliothek verknüpft. Die nachfolgenden Versionen waren statisch verknüpft.
Zu diesem Zeitpunkt stellte ich fest, dass der Knoten auf meinen Fehler geantwortet hatte: https://github.com/joyent/node/issues/8026
Knoten erklärt, warum:
Nachdem der Knoten sich selbst kompiliert, werden die Symbole gelöscht, die er nicht verwendet, sodass wir die Symbole beim Ausführen nicht finden können. Also haben sie den Fehler behoben und alle Symbole behalten. Dies führte dazu, dass der Knoten 400.000 größer war.
Dank Node für seine schnelle Antwort muss ich den Aktivitätsniveau des Knotens bewundern. Wie.