Не удалось найти порядковый номер 372 в файле openscript.exe из WAMP / Apache.

Я использую PHP-инфраструктуру OpenSSL для различных функций, но при выполнении чего-либо, связанного с OpenSSL, возникает следующая ошибка: «Не удается найти порядковый номер 372 в DLL-файле C: \ wamp64 \ bin \ apache \ apache2.4.17 \ bin \ openssl.exe».

Я не знаю, как это исправить, я всюду повсюду. Я был бы признателен за помощь, поскольку я не знаю, как это исправить.

Related of "Не удалось найти порядковый номер 372 в файле openscript.exe из WAMP / Apache."

Чтобы исправить эту проблему, необходимы две вещи:

1) Убедитесь, что у вас нет символических ссылок для libeay32.dll и ssleay32.dll в вашем каталоге bin Apache (например, у меня есть: C: \ wamp64 \ bin \ apache \ apache2.4.23 \ bin)

Если у вас есть символические ссылки (т. Е. Размер файла – 0 байт), вам нужно загрузить DLL из Apache Lounge. Например, я захватил два файла .dll из 64-разрядной версии Apache 2.4.23, размещенной на https://www.apachelounge.com/download/

2) После восстановления файлов .dll вам необходимо убедиться, что WampServer не перезаписывает их. У WampServer 3 есть сценарий конфигурации, который запускается каждый раз, когда он запускается. В этом скрипте он будет перезаписывать эти. DLL с символическими ссылками. Вы должны отключить эту функциональность. Чтобы сделать это, закомментируйте ссылки на эти два файла в: C: \ wamp64 \ scripts \ config.inc.php (мои были расположены по строкам 133 и 139).

Это должно позволить вам включить модуль mod_ssl в Apache. Вам также необходимо раскомментировать «Включить conf / extra / httpd-ssl.conf» после правильной загрузки Apache с включенным mod_ssl. (Тем не менее, вам, вероятно, придется удалить большую часть того, что там, и начать с тех пор, как он включает в себя множество жестко заданных путей и ошибок)

… "Не удается найти порядковый номер 372 в DLL-файле C: \ wamp64 \ bin \ apache \ apache2.4.17 \ bin \ openssl.exe"

Я предполагаю его PEM_SealInit или SSL_CONF_cmd_argv из OpenSSL 1.0.2; или ASN1_i2d_fp или SSL_SESSION_set1_id_context из OpenSSL 1.1.0.

 # OpenSSL 1.1.0 $ find $PWD -type f -iname '*.num' -exec grep " 372" {} \; ASN1_i2d_fp 372 1_1_0 EXIST::FUNCTION:STDIO SSL_SESSION_set1_id_context 372 1_1_0 EXIST::FUNCTION: ... # OpenSSL 1.0.2 $ find $PWD -type f -iname '*.num' -exec grep " 372" {} \; PEM_SealInit 372 EXIST::FUNCTION:RSA SSL_CONF_cmd_argv 372 EXIST::FUNCTION: ... 

Вам нужно будет проверить его, используя dumpbin или Dependency Walker . Также см. Как найти имя экспортируемой функции из ординала (экспорт по порядку)? на переполнение стека.


Ординалы создаются с помощью <openssl src>\util\mkdef.pl . Вы можете увидеть исходный код из присутствия GitHub OpenSSL. Вот 1.0.2 и здесь 1.1.0 .

Вот главные комментарии к файлу:

 #!/usr/local/bin/perl -w # # generate a .def file # # It does this by parsing the header files and looking for the # prototyped functions: it then prunes the output. # # Intermediary files are created, call libcrypto.num and libssl.num, # The format of these files is: # # routine-name nnnn vers info # # The "nnnn" and "vers" fields are the numeric id and version for the symbol # respectively. The "info" part is actually a colon-separated string of fields # with the following meaning: # # existence:platform:kind:algorithms # # - "existence" can be "EXIST" or "NOEXIST" depending on if the symbol is # found somewhere in the source, # - "platforms" is empty if it exists on all platforms, otherwise it contains # comma-separated list of the platform, just as they are if the symbol exists # for those platforms, or prepended with a "!" if not. This helps resolve # symbol name variants for platforms where the names are too long for the # compiler or linker, or if the systems is case insensitive and there is a # clash, or the symbol is implemented differently (see # EXPORT_VAR_AS_FUNCTION). This script assumes renaming of symbols is found # in the file crypto/symhacks.h. # The semantics for the platforms is that every item is checked against the # environment. For the negative items ("!FOO"), if any of them is false # (ie "FOO" is true) in the environment, the corresponding symbol can't be # used. For the positive itms, if all of them are false in the environment, # the corresponding symbol can't be used. Any combination of positive and # negative items are possible, and of course leave room for some redundancy. # - "kind" is "FUNCTION" or "VARIABLE". The meaning of that is obvious. # - "algorithms" is a comma-separated list of algorithm names. This helps # exclude symbols that are part of an algorithm that some user wants to # exclude.