9
votes

Utilisez SSL avec Delphi pourtant toujours une seule exe

Nous utilisons Indy et nous avons besoin d'une assistance par courrier électronique SSL dans notre application., Toutefois, nous devons avoir notre application dans un seul .exe.

Nous savons que le gestionnaire indy par défaut nécessite d'avoir les DLL dans le chemin. L'extraction des DLL de l'une des ressources de l'EXE serait le dernier recours.

Toutes meilleures idées?


2 commentaires

Vraisemblablement, vous parlez des deux dlls Open SSL que Indy utilise? Ce dont vous auriez besoin, c'est une implémentation DELPHI de ce que font ces DLL, que je doute est disponible.


Oui, j'ai parlé d'eux. Mais je ne pense pas qu'une mise en œuvre de Delphes des Libs Openssl est la seule façon d'aller. Quoi qu'il en soit, merci de clarification.


8 Réponses :


8
votes

Essayez SSLblackbox .


0 commentaires

2
votes

est l'exigence "Simple EXE" à des fins de distribution ou doit également être un fichier unique .exe lorsqu'il est exécuté sur la machine du client?

Si ce n'est à des fins de distribution, vous pouvez ajouter les fichiers DLL à la fin de votre fichier .exe, puis - lorsque le programme démarre - extraire-les du fichier .exe et rangez-les localement sous forme de fichiers .dll, quelque chose comme ceci: p>

VAR F,O : FILE;
VAR BUF : ARRAY[1..<MaxSizeOfDLLs>] OF BYTE;
ASSIGN(F,ParamStr(0)); RESET(F,1);
SEEK(F,<OriginalExeSize>);
BLOCKREAD(F,BUF,<FirstDllSize>);
ASSIGN(O,<NameOfFirstDLL>); REWRITE(O,1);
BLOCKWRITE(O,BUF,<FirstDllSize>); CLOSE(O);
BLOCKREAD(F,BUF,<SecondDllSize>);
ASSIGN(O,<NameOfSecondDLL>); REWRITE(O,1);
BLOCKWRITE(O,BUF,<SecondDllSize>); CLOSE(O);
SEEK(F,<OriginalExeSize>); TRUNCATE(F); CLOSE(F)


2 commentaires

Un programmeur de COBOL chevronné peut écrire un programme COBOL dans n'importe quelle langue. ;-)


L'intégration du code SSL rend plus difficile l'interception d'appels. L'utilisation de DLLS Quelqu'un peut écrire une DLL proxy et intercepter des appels. Ce n'est pas un problème si l'application se déroule dans un environnement contrôlé (c'est-à-dire un serveur Web), mais cela pourrait être dans des environnements incontrôlés.



0
votes

Const xxx

... xxx


1 commentaires

CDO exige que toutes sortes de DLL soient installées sur la machine d'utilisateur final. Si les versions précédentes d'Outlook sont installées, elles sont automatiquement présentes, mais la SEP arrêtait d'installer les fichiers CDO avec Outlook 2007 et ultérieurement, et fournissez donc une REDIST pour le CDO.



3
votes

Soyez conscient: Si vous ajoutez une prise en charge SSL / TLS à l'intérieur de votre exécutable, cela pourrait devenir restreint pour l'exportation < / a>. Si vous êtes aux États-Unis, cela pourrait signifier que votre application ne peut pas être vendue ou donnée aux personnes en dehors des États-Unis. C'est pourquoi ces DLL ne font pas partie d'Indy ou de Delphes eux-mêmes.

Les bibliothèques utilisées Delphi sont en réalité compilées de DLL à partir du Projet OpenSSL . Mais si vous avez une bonne connaissance de C, alors vous devriez être capable de compiler la source à des fichiers .OBJ et de les relier à votre code Delphi. Vous auriez probablement besoin de modifier une partie du code indy pour cela aussi. Bien sûr, d'autres auraient également pu faire cela aussi, mais cela rend l'exportation de ces composants indy (ou même de Delphi) plus complexes, en raison de ces restrictions à l'exportation.

Assez enfoncé, le code source est protégé par la première modification qui vous permet essentiellement d'imprimer le code dans un livre, puis de l'envoyer à une nation rogue. Tandis que si vous l'envoyiez sous forme numérique (compilée ou non), vous vous engagez une infraction fédérale et devrez probablement faire attention lorsque vous ramassez le savon sous la douche pendant au moins un an ... personne n'a affirmé que Les lois ont du sens. Ils peuvent simplement être une douleur dans le [BEEP] ...

D'autres solutions SSL ne fonctionnent pas avec les composants Indy, ce qui signifierait que vous devriez réécrire une partie de votre code pour soutenir ces autres solutions.


Ce lien indique comment vous pouvez charger une DLL de la mémoire, de sorte que vous Vous n'avez pas besoin de l'avoir sur le disque. C'est une solution alternative que je n'ai pas essayée. Je ne pense pas que cela fonctionnerait, car les deux DLL dépendent les uns des autres, mais cela vaut la peine d'essayer ...

3 commentaires

À moins que son plan ne soit que le client ait du client télécharger les DLL séparément, il serait également soumis aux restrictions d'exportation de toute façon depuis qu'il distribuerait le programme et les DLL requises ensemble.


AFAIK Une certaine restriction à l'exportation a été levée - par exemple, Apache propose des téléchargements activés par SSL.


La restriction à l'exportation est principalement lors de l'exportation des États-Unis, bien que d'autres pays ont des restrictions similaires. Ignorer cette restriction est à vos risques et périls, même si je ne m'attends pas à ce que le risque soit réel. La bibliothèque OpenSSL contient de nombreuses technologies de cryptage. Cette bibliothèque est donc restreinte. Apache-SSL est basé sur OpenSSL, mais elle est hébergée par une organisation au Royaume-Uni, d'autres restrictions s'appliquent à elles.



5
votes

Tondrey vous a donné une bonne réponse. J'utilise également Secureblackbox. Vous pouvez envisager d'autres composants tiers:


0 commentaires

1
votes

J'utilise le CAPICOM de Microsoft pour SSL3 et cela a résolu mes besoins ... il est librement redistributable mais discontinué

Si vous essayez d'autres composants, vous devriez peut-être regarder à la synapse (à http://synapse.ararat.cz/ < / a>) (J'utilise également) cela peut fonctionner avec StreamSec (et d'autres) pour envoyer des courriels sur SSL. C'est gratuit et facile à travailler.


0 commentaires

0
votes

Il est possible d'inclure ces DLL dans l'exécutable du programme en tant que ressources et d'exporter des fichiers lorsqu'il est utilisé ou même les utiliser sans les exporter d'abord en déplacant le code et en recherchant les points d'entrée en mémoire. J'ai du code quelque part pour avoir fait ce dernier ....


0 commentaires

2
votes

1 commentaires

Indy 10 a un idssslopensslheaders_static.pas unité pour la liaison statique à OpenSSL. Il est destiné à être utilisé sur iOS uniquement, mais pourrait être adapté pour travailler sur d'autres plates-formes, si vous avez des objs appropriés pour cela.