openssl https 单向认证连接成功示例
生活随笔
收集整理的這篇文章主要介紹了
openssl https 单向认证连接成功示例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
openssl https 單向認證連接成功示例
研究這個玩意也有幾天的時間了,剛學C 因為不熟悉編譯折騰了不少時間,終于弄通了,發(fā)個隨筆給研究openssl https的同學一點提示吧。
環(huán)境:
==========================================================
UBUNTU 12.04
OPENSSL 1.0.2d
SSL:SSL2(同學們可以研究下使用TSL和SSL3,我還木有研究好)
TOOL: code::blocks
==========================================================
測試結(jié)果截圖:
CODE:
#include <stdio.h> #include <stdlib.h> #include "openssl/bio.h" #include "openssl/ssl.h" #include "openssl/err.h"char* join(char *s1, char *s2); int main() {BIO *sbio, *out;int len;char tmpbuf[1024];SSL_CTX *ctx;SSL *ssl;//ERR_load_crypto_strings();ERR_load_SSL_strings();//OpenSSL_add_all_algorithms();SSL_library_init();//如果系統(tǒng)平臺不支持自動進行隨機數(shù)種子的設(shè)置,這里應(yīng)該進行設(shè)置(seed PRNG)ctx = SSL_CTX_new(SSLv23_client_method());//ctx = SSL_CTX_new(TLS_client_method());//SSL_CTX_set_cipher_list(ctx,"EXP-RC4-MD5");//通常應(yīng)該在這里設(shè)置一些驗證路徑和模式等,因為這里沒有設(shè)置,所以該例子可以跟使用任意CA簽發(fā)證書的任意服務(wù)器建立連接sbio = BIO_new_ssl_connect(ctx);BIO_get_ssl(sbio, &ssl);if(!ssl){fprintf(stderr, "Can't locate SSL pointer/n");ERR_print_errors_fp(stderr);}/* 不需要任何重試請求*/SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);//這里你可以添加對SSL的其它一些設(shè)置BIO_set_conn_hostname(sbio, "106.39.167.232:443");out = BIO_new_fp(stdout, BIO_NOCLOSE);if(BIO_do_connect(sbio) <= 0){fprintf(stderr, "Error connecting to server/n");ERR_print_errors_fp(stderr);}printf("SSL?connection?using?%s\n",SSL_get_cipher(ssl));//SSL_CTX_set_cipher_list(ctx,SSL_get_cipher(ssl));X509 *cert = SSL_get_peer_certificate(ssl);printf ("Server certificate:\n");char *str = X509_NAME_oneline(X509_get_subject_name(cert),0,0);printf ("\t subject: %s\n", str);OPENSSL_free(str);str = X509_NAME_oneline(X509_get_issuer_name(cert),0,0);printf ("\t issuer: %s\n", str);OPENSSL_free(str);X509_free(cert);if(BIO_do_handshake(sbio) <= 0){fprintf(stderr, "Error establishing SSL connection/n");ERR_print_errors_fp(stderr);}/* 這里可以添加檢測SSL連接的代碼,得到一些連接信息*/const char *http_req_hdr_tmpl = "GET %s HTTP/1.1\r\n""Accept: image/gif, image/jpeg, text/json,text/html */*\r\nAccept-Language: zh-cn\r\n""Accept-Encoding: gzip, deflate\r\nHost: %s\r\n""User-Agent: %s <0.1>\r\nConnection: Keep-Alive\r\n\r\n";int bufsize = 1024;char header_get[bufsize];len = sprintf(header_get,http_req_hdr_tmpl,"/routerjson","api.jd.com","User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36");//BIO_puts(sbio, header_get);BIO_write(sbio,header_get,len);for(;;){len = BIO_read(sbio, tmpbuf, 1024);if(len <= 0) break;BIO_write(out, tmpbuf, len);}BIO_free_all(sbio);BIO_free(out);return 0; }?如果不知道怎么編譯鏈接或者出錯的同學請看我的另一篇隨筆
?解決引用openssl靜態(tài)庫libcrypto.a和libssl.a出現(xiàn)undefined reference to錯誤的問題
?
posted on 2015-11-27 22:45 Rhina 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/Boyona/p/5001921.html
總結(jié)
以上是生活随笔為你收集整理的openssl https 单向认证连接成功示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于android 自定义TitleBa
- 下一篇: 多线程中Local Store Slot