Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "header.h"
- //#include "osal.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <unistd.h>
- #include <arpa/inet.h>
- #include <openssl/ssl.h>
- #include <openssl/err.h>
- #include <openssl/x509.h>
- #define SERVER_IP "127.0.0.1"
- #define PORT 7788
- #define MAXBUF 1024
- #define CAFILE "./ca.pem"
- void ShowCerts(SSL * ssl)//�õ��������˵�֤����Ϣ������ӡ����(��ѡ�������DZ�����)
- {
- X509 *cert;
- char *line;
- if(X509_V_OK != SSL_get_verify_result(ssl))//��֤����������Ҫ��Ӧ����CA֤�飬��������֤���Ϸ������������Ӳ��ܼ������У�ֻ����Ҫ�ͻ������߾���
- {
- printf("warning!!!!!!\n Failed verify the server certificate!\n");
- }
- cert = SSL_get_peer_certificate(ssl);//��ssl�ṹ����ȡ���Է���֤��(ע:��ʱ֤���Ѿ��õ����Ѿ�������֤)
- if (cert != NULL)
- {
- line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);
- printf("certificate: %s\n", line);
- free(line);
- line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);
- printf("issuer: %s\n", line);
- free(line);
- X509_free(cert);
- }
- else
- {
- printf("No certificate information\n");
- }
- }
- int connect2server()
- {
- int iret,sockfd,len;
- SSL_CTX *ctx;
- SSL *ssl;
- char ssl_buf[MAXBUF];
- struct sockaddr_in server;
- char connected[]="connected.";
- char recv[]="Recv";
- char send[]="Send";
- SSL_library_init();
- OpenSSL_add_all_algorithms();
- SSL_load_error_strings();
- ctx = SSL_CTX_new(SSLv23_client_method());
- if(ctx == NULL)
- {
- ERR_print_errors_fp(stdout);
- exit(1);
- }
- if((iret = SSL_CTX_load_verify_locations(ctx,CAFILE,NULL)) == 0)
- {
- printf("SSL_CTX_load_verify_locations err: %d\n", iret);
- }
- if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
- {
- perror("Socket");
- exit(errno);
- }
- bzero(&server, sizeof(server));
- server.sin_family = AF_INET;
- server.sin_port = htons(PORT);
- if(inet_aton(SERVER_IP, (struct in_addr *)&server.sin_addr.s_addr) == 0)
- {
- perror(SERVER_IP);
- exit(errno);
- }
- if((iret = connect(sockfd, (struct sockaddr *)&server, sizeof(server))) != 0)
- {
- perror("Connect");
- exit(errno);
- }
- printf("Connected\n");
- ssl = SSL_new(ctx);
- SSL_set_fd(ssl, sockfd);
- printf("start SSL_connect.\n");
- if(SSL_connect(ssl) == -1)
- {
- ERR_print_errors_fp(stderr);
- }
- else
- {
- ShowCerts(ssl);
- // printf("SSL_connect.\n");
- printf("Connected with %s encryption\n", SSL_get_cipher(ssl));//��ӡ����֧�ֵļ����㷨��Ϣ
- }
- bzero(ssl_buf, MAXBUF);
- strcpy(ssl_buf, "Hello Server: This is ssl client!\n");
- printf("Send\n");
- len = SSL_write(ssl, ssl_buf, strlen(ssl_buf));
- if (len <= 0)
- {
- printf ("SSL_write error, errno=%d(%s)\n",errno, strerror(errno));
- goto error;
- }
- else
- {
- printf("SSL_write %d bytes: %s\n", len, ssl_buf);
- }
- printf("Receive\n");
- bzero(ssl_buf, MAXBUF);
- while(1)
- {
- len = SSL_read(ssl, ssl_buf, MAXBUF);
- if(len < 0)
- {
- printf("SSL_read error, errno=%d(%s)\n", errno, strerror(errno));
- ERR_print_errors_fp(stdout);
- goto error;
- }
- if(0 == len)
- continue;
- break;
- }
- printf("SSL_read %d bytes: %s\n",len, ssl_buf);
- usleep(100*2000);
- error:
- SSL_shutdown(ssl);
- SSL_free(ssl);
- close(sockfd);
- SSL_CTX_free(ctx);
- return 0;
- }
- int SslClient()
- {
- connect2server();
- usleep(100*1000);
- return 0;
- }
- int main()
- {
- SslClient();
- return 0;
- }
Add Comment
Please, Sign In to add comment