PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SSL Support für C und Java



maceop
16-02-2003, 10:01
Hallo,
vor kurzem habe ich in einem anderen Forum eine (mehr oder weniger) unbeantwortete Frage bezüglich SSL SUpport für C (und Java) gelesen. Nun würde mich mal interessieren, in wiefern ihr hier Infos zu diesem Thema habt.

kann ich mit "integriertem" ssl support z.B. auch "https://www....." als url aufrufen ?

mfg
maceop

SeeksTheMoon
16-02-2003, 13:01
nun, weil es in java eine Klasse HttpsURLConnection (in javax.net.ssl) gibt, ist dies möglich

maceop
16-02-2003, 13:41
Danke ! und was ist mit "sonstigem" SSL Support (also abgesehen von URL) für Java (und C) ?

danke im voraus
maceop


---edit:---
hat einer von euch vielleicht nen beispiel-code zu HttpsURLConnection ?

arthur
16-02-2003, 14:37
für c schau dir mal libcurl.

maceop
16-02-2003, 15:27
ich hab in nem thread mal gelesen, dass man auch OpenSSL verwenden kann, dort stand einmal "If you are using Java, I would recommend OpenSSL" und woanders stand das gleiche für C. kann ich OpenSSL also für C und java verwenden ?

arthur: danke, hast du vielleicht beispiel-code ?

tia
maceop

arthur
16-02-2003, 15:48
libcurl benutzt auch openssl, schau dir einfach die mitgelieferten beispiele an.



/************************************************** ***************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* $Id: simplessl.c,v 1.4 2002/11/22 07:39:15 bagder Exp $
*/

#include <stdio.h>

#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>


/* some requirements for this to work:
1. set pCertFile to the file with the client certificate
2. if the key is passphrase protected, set pPassphrase to the
passphrase you use
3. if you are using a crypto engine:
3.1. set a #define USE_ENGINE
3.2. set pEngine to the name of the crypto engine you use
3.3. set pKeyName to the key identifier you want to use
4. if you don't use a crypto engine:
4.1. set pKeyName to the file name of your client key
4.2. if the format of the key file is DER, set pKeyType to "DER"

!! verify of the server certificate is not implemented here !!

**** This example only works with libcurl 7.9.3 and later! ****

*/

int main(int argc, char **argv)
{
CURL *curl;
CURLcode res;
FILE *headerfile;

const char *pCertFile = "testcert.pem";
const char *pCACertFile="cacert.pem"

const char *pKeyName;
const char *pKeyType;

const char *pEngine;

#if USE_ENGINE
pKeyName = "rsa_test";
pKeyType = "ENG";
pEngine = "chil"; /* for nChiper HSM... */
#else
pKeyName = "testkey.pem";
pKeyType = "PEM";
pEngine = NULL;
#endif

const char *pPassphrase = NULL;

headerfile = fopen("dumpit", "w");

curl_global_init(CURL_GLOBAL_DEFAULT);

curl = curl_easy_init();
if(curl) {
/* what call to write: */
curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://your.favourite.ssl.site");
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);

while(1) /* do some ugly short cut... */
{
if (pEngine) /* use crypto engine */
{
if (curl_easy_setopt(curl, CURLOPT_SSLENGINE,pEngine) != CURLE_OK)
{ /* load the crypto engine */
fprintf(stderr,"can't set crypto engine\n");
break;
}
if (curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT,1) != CURLE_OK)
{ /* set the crypto engine as default */
/* only needed for the first time you load
a engine in a curl object... */
fprintf(stderr,"can't set crypto engine as default\n");
break;
}
}
/* cert is stored PEM coded in file... */
/* since PEM is default, we needn't set it for PEM */
curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
/* set the cert for client authentication */
curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile);
/* sorry, for engine we must set the passphrase
(if the key has one...) */
if (pPassphrase)
curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,pPassph rase);
/* if we use a key stored in a crypto engine,
we must set the key type to "ENG" */
curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType) ;
/* set the private key (file or ID in engine) */
curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName);
/* set the file with the certs vaildating the server */
curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile);
/* disconnect if we can't validate server's cert */
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1);

res = curl_easy_perform(curl);
break; /* we are done... */
}
/* always cleanup */
curl_easy_cleanup(curl);
}

curl_global_cleanup();

return 0;
}

maceop
16-02-2003, 16:13
nochmals danke, leider sieht es bei libcurl bezüglich des Java-Supports ja nicht sonderlich "üppig" aus, egal werd wohl SeeksTheMoon's "tipp" bezüglich java beherzigen.

mfg
maceop

maceop
23-02-2003, 19:12
hi,
ich wollte nur nochmal nachfragen ob jemand ein funktionierendes beispiel zu HttpsURLConnection hat oder einen link dazu hat.

hab im internet was gefunden, allerdings funktionierte davon nichts.

danke im voraus.

mfg
maceop

Immortal
16-07-2003, 21:39
Hallo,

der Thread ist zwar schon ein wenig älter, aber ich hab eine zu interessante
Seminararbeit zu genau diesem Thema gefunden, als das ich sie hier nicht
posten sollte :)

Die Quelle gibt erst einen Überblick über das das Protokoll, deren Ver-
schlüsselung und Authentifizierung. Dann werden die verschiedenen
existierenden Schnittstellen besprochen und als letztes wird die
Implementation, anhand eines Java-Clients, beschrieben.

Meiner Meinung nach sehr interessant :>

Und hier ist das pdf file:

www2.inf.fh-bonn-rhein-sieg.de/~rberre2m/ lehre/ss02/vps1/seminar/SSL.pdf

bye,
Marco