1

J'utilise Axis2C avec OpenSSL dans VC++ 2008 pour accéder à un service Web https. Chaque fois que la communication réelle est en cours, j'obtiens une exception fatale d'exécution:Axis2C avec OpenSSL - pas d'erreur OPENSSL_APPLINK

OPENSSL_UPLINK: non OPENSSL_APPLINK. J'ai lu qu'il y a plusieurs choses que vous devriez faire, comme un lien dans le fichier applink.c de mon application. Je l'ai fait, (en utilisant extern "C"), et j'appelle aussi CRYPTO_malloc_init. Les deux sont inefficaces ... Je suis un peu perdu ici.

Quoi d'autre dois-je vérifier? aussi, quelqu'un sait-il pourquoi axis2c écrit parfois dans le fichier axis.log, et parfois non?

Merci!

Roey.

Répondre

2

Cela peut être dû aux drapeaux de compilation. Voici comment vous pouvez compiler Axis2c + OpenSSL 64 Bit sous Windows.

Créer Axis2c 64 bits avec OpenSSL

Versions:

  • Axis2c 1.6.0
  • OpenSSL 1.0.0d

Pré-requis:

  • Perl 5 (64 version bits)

Perl doit être dans le% environnement système PATH variable%

OpenSSL

Configurer et compiler OpenSSL:

cd <openssl_root_dir> (e.g. C:\tmp\openssl-1.0.0b) 
perl Configure VC-WIN64A 
ms\do_win64a 
nmake -f ms\ntdll.mak 
cd out32dll 
..\ms\test 

Pour prévenir modifications supplémentaires dans le fichier make Axis2c, copiez les fichiers dans la structure dir suivante:

<openssl_root_dir>/bin (libeay32.dll, ssleay32.dll) 
<openssl_root_dir>/lib libeay32.lib, ssleay32.lib) 
<openssl_root_dir>/include/openssl (all *.h, *.c files) 

Axis2c

Configurer Axis2C

Modifiez les paramètres suivants dans \ build \ win32 \ configure.dans:

ENABLE_SSL = 1 OPENSSL_BIN_DIR = 
<openssl_root_dir> (e.g. 
C:\tmp\openssl-1.0.0b) CRUNTIME = /MD 
EMBED_MANIFEST = 1 

Modifiez les paramètres suivants dans \ build \ win32 \ makefile:

LDFLAGS = $(LDFLAGS) /LIBPATH:$(OPENSSL_BIN_DIR)\lib 
LIBS = $(LIBS) libeay32.lib ssleay32.lib 

Compile Axis2C cd \ build \ win32 nmake installer

Tous les fichiers encessary sont dans le dossier : \ build \ deploy

Les 2 fichiers dll OpenSSL (libeay32.dll, ssleay32.dll) peuvent être c opied au sous-dossier deploy \ lib manuellement.

3

J'ai eu un problème similaire, en utilisant OpenSSL 1.0.1e (précompilés pour Win32 de http://slproweb.com/products/Win32OpenSSL.html).

Je ne suis pas sûr de ce que la cause était, mais le problème a disparu quand je rebâti ma demande en utilisant les bibliothèques statiques pour VC, au lieu des bibliothèques DLL.

En d'autres termes, cette bibliothèque ici a échoué pour moi:

C:\OpenSSL-Win32\lib\libeay32.lib 

Mais relier à nouveau cette bibliothèque a réussi

C:\OpenSSL-Win32\lib\VC\static\libeay32MD.lib 

Il est peut-être lié aux incompatibilités avec d'autres bibliothèques (voir http://forums.epo.org/installation-and-maintenance/topic1373.html) jusqu'à Je pourrais dire, mon application a seulement utilisé la librairie libeay32.

En outre, il s'agissait de la manipulation PEM. J'ai été capable de générer une clé RSA, mais je ne pouvais pas l'écrire, quand je me suis lié à la DLL au lieu de statiquement.

+0

+1 pour "PEM handling". Cela m'a fait réaliser que je pointais sur un fichier CERT inexistant, qui a fait disparaître l'erreur! –

0

Selon openssl faq:

Comme par 0.9.8 la limitation ci-dessus est éliminé pour .DLLs. OpenSSL .DLLs compilé avec une option d'exécution spécifique [nous insistons sur le par défaut/MD] peuvent être déployés avec application compilée avec différentes options ou même compilateur différent. Mais il ya un hic! Au lieu de recompiler boîte à outils OpenSSL, comme vous devez avec les versions antérieures , vous devez compiler petit extrait de C avec le compilateur et/ou options de votre choix. L'extrait est installé comme /include/openssl/applink.c et doit être soit ajouté à votre projet d'application ou simplement #include-d dans un [et un seul] de vos fichiers source d'application. Échec de lier ce module de shim dans votre application se manifeste comme irrécupérable "no OPENSSL_Applink" erreur d'exécution. Un rappel explicite est dû au fait que dans cette situation [mélange des options du compilateur] il est aussi important d'ajouter CRYPTO_malloc_init avant le premier appel à OpenSSL.

Alors il suffit d'inclure applink.c dans votre projet & enjoy!