?
Ich hab mich jetzt etwas tiefer in die docs von openssl geworfen und habe nach einzelnen funktionen dann über google gesucht. rausgekommen ist dann ein mini https client (zusammengestellt aus einem borland tutorial und diversen forenbeiträgen)
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
int main ()
{
struct sockaddr_in host_addr;
int size;
int s;
struct hostent *host;
char hostname[MAXHOSTNAMELEN];
char buf[1000];
char request[1000];
SSL_CTX *ctx;
SSL *ssl;
int err;
printf("\nEnter Hostname: ");
scanf("%s", &hostname);
host = gethostbyname(hostname);
if (host == NULL) {
fprintf(stderr, "Unknown Host %s\n", hostname);
return -1;
}
fflush(stdout);
s = socket(PF_INET, SOCK_STREAM, 0);
if (s < 0) {
fprintf(stderr, "Socket Error\n");
return -1;
}
host_addr.sin_family = AF_INET;
host_addr.sin_addr = *((struct in_addr *)host->h_addr);
host_addr.sin_port = htons(443);
if (connect(s, (struct sockaddr *)&host_addr, sizeof(host_addr)) == -1) {
close(s);
fprintf(stderr, "Connection Error\n");
return -1;
}
SSL_load_error_strings();
SSL_library_init();
ctx=SSL_CTX_new(SSLv23_client_method());
ssl=SSL_new(ctx);
if(!ssl) {
close(s);
fprintf(stderr, "SSL creation error\n");
return -1;
}
SSL_set_fd(ssl, s);
err=SSL_connect(ssl);
if(!err) {
close(s);
fprintf(stderr, "SSL connect error\nretval: %d\n", err);
err=SSL_get_error(ssl, err);
fprintf(stderr, "SSL error: %d\n", err);
return -1;
}
sprintf(request,"GET %s HTTP/1.0\r\nHost: %s\r\n\r\n","/","www.kernel.org");
err=SSL_write(ssl, request, strlen(request));
if(!err) {
close(s);
fprintf(stderr, "SSL write error\n");
return -1;
}
while(1) {
int read_size;
read_size=SSL_read(ssl, buf, sizeof(buf)-1);
buf[read_size]='\0';
if (read_size > 0) {
printf("Getting %d Bytes of Data\nData: %s\n", read_size, buf);
} else {
break;
}
}
SSL_shutdown(ssl);
SSL_free(ssl);
SSL_CTX_free(ctx);
fflush(stdout);
close(s);
return 0;
}
erstellt habe ich das ganze dann mit diesem befehl:
gcc -I/usr/include/ -lssl -o sslclient sslclient.c
als host habe ich kernel.org genommen und bekomme auch schön den html code zurück