Punca perkara ini atas sebab tertentu, saya baru-baru ini menulis modul c Nodejs, dan kemudian memanggilnya di sebelah js. Komunikasi rangkaian secara semula jadi tidak dapat dipisahkan daripada ssl, jadi ia perlu dipautkan ke perpustakaan Openssl.
Jangkaan asal kami ialah pengguna perlu memasang perpustakaan masa jalan Openssl, dan kemudian modul c kami akan dipautkan secara dinamik kepada pustaka Openssl supaya berjalan.
Semuanya kelihatan baik pada mulanya, sehingga kami mendapati bahawa fungsi openssl ini tidak berfungsi:
PKCS7_sign()
PKCS7_sign ( )
Kami mendapati:
Jika modul c kami dipautkan secara dinamik dengan perpustakaan Openssl, tidak akan ada masalah dalam penyusunan Tetapi apabila dijalankan, ralat akan muncul: Simbol PKCS7_sign tidak dapat ditemui.
Jika modul c kami dikaitkan secara statik dengan perpustakaan Openssl, tidak akan ada masalah dalam penyusunan, tetapi apabila berjalan, tempat di mana fungsi ini dipanggil tidak mempunyai kesan, dan nilai pulangan fungsi ini ialah 0. Menurut dokumentasi, ralat berlaku, tetapi ralat diperoleh menggunakan fungsi Openssl ERR_get_error Kodnya juga 0. Ini bermakna tiada kod ralat.
Ini benar di Linux, tetapi bagaimana dengan Mac Saya mencubanya pada Mac dan mendapati bahawa tiada masalah dengan Mac Jadi saya fikir ini mungkin pepijat dalam Nodejs. Kemudian saya pergi ke Nodejs dan melaporkan pepijat kepadanya. https:// github.com/joyent/node/issues/8026][1]
Pada masa yang sama, saya mencari kata kunci yang serupa dengan nodejs yang memaut ke openssl di google.
Menjumpai beberapa artikel seperti ini:
https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL
https://github.com/joyent/node/issues/3915
https://github.com/robhawkes/node-extension/issues/1
Melalui carian, kami mendapati bahawa Nodejs sendiri juga menggunakan pustaka Openssl Diperkirakan bahawa modul kripto nodejs sendiri juga dilaksanakan menggunakan lib Openssl Ini boleh didapati daripada kod sumber Nodejs, yang mengandungi semua Openssl yang terkini Kod sumber.
Lelaki tampan yang menulis artikel pertama di atas: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL ialah pembangun Nodejs.
Kesimpulan asas:
Nodejs menggunakan Openssl sendiri
Sebelum Nodejs 0.6, Nodejs telah dipautkan secara dinamik ke pustaka Openssl Versi kemudiannya dipautkan secara statik.
Pada masa ini, saya mendapati bahawa Node telah pun membalas pepijat saya: https://github.com/joyent/node/issues/8026
Sebab yang dijelaskan oleh Node:
Selepas Node menyusun sendiri, ia mengosongkan simbol yang tidak digunakan, jadi kami tidak dapat menjumpai simbol semasa berjalan Jadi mereka membetulkan pepijat dan mengekalkan semua simbol ini menyebabkan saiz Node menjadi lebih besar.
Terima kasih Node atas balasan pantas, saya mesti mengagumi keaktifan Node.