亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

OpenSSL手寫HTTPS客戶端:從TLS握手到HTTP請求的完整實戰(zhàn)

OpenSSL手寫HTTPS客戶端:從TLS握手到HTTP請求的完整實戰(zhàn) 簡介本資源是一份面向C網(wǎng)絡(luò)編程初學(xué)者與嵌入式/客戶端開發(fā)者的HTTPS通信實踐工程聚焦于原生Socket與OpenSSL集成實現(xiàn)HTTP/HTTPS協(xié)議級POST請求特別適配MFC桌面應(yīng)用開發(fā)場景。資源完整封裝了小米官網(wǎng)等HTTPS站點的登錄驗證邏輯解決了C開發(fā)者在無第三方框架依賴下安全訪問加密Web服務(wù)的核心難點。壓縮包共148個文件含9個核心cpp源碼、81個h頭文件、2個lib靜態(tài)庫及2個dll動態(tài)庫輔以vcxproj工程配置與sln解決方案便于直接編譯運行另有pdb調(diào)試符號、rc資源腳本等體現(xiàn)典型MFC項目結(jié)構(gòu)完整性。包體大小為40.15MB已獲711人學(xué)習(xí)下載。讀者可直接復(fù)用其中的BaseClient、LoginService等模塊化類設(shè)計快速集成HTTPS登錄能力同時獲得預(yù)編譯OpenSSL開發(fā)套件含頭文件與庫免去環(huán)境搭建與鏈接配置的繁瑣過程顯著降低安全通信功能落地門檻。1. OpenSSL訪問HTTPS不是調(diào)個API就完事是手撕TLS握手、解析證書鏈、繞過自簽名陷阱的硬核實戰(zhàn)你寫了個C程序用curl_easy_perform()發(fā)個HTTPS請求一切順利但換成純OpenSSL自己搭SOCKET、建SSL_CTX、做SSL_connect()立馬卡在SSL_ERROR_SSL日志里只有一句“unable to get local issuer certificate”——這根本不是網(wǎng)絡(luò)不通是證書信任鏈斷了。這不是教科書里的“HTTPS HTTP TLS”而是真實產(chǎn)線里某跨平臺系統(tǒng)必須嵌入輕量級TLS能力、不能依賴curl或Boost.Beast時某開發(fā)者被逼到墻角后翻遍RFC 5246和OpenSSL 1.1.1源碼才搞明白的現(xiàn)場OpenSSL訪問HTTPS本質(zhì)是手動復(fù)現(xiàn)瀏覽器90%的TLS初始化邏輯——從SSL_CTX配置策略、證書驗證回調(diào)植入、SNI域名透傳到BIO_do_connect()超時控制、SSL_read()分幀處理、錯誤碼映射還原。它適合兩類人一類是正在做嵌入式網(wǎng)關(guān)、IoT設(shè)備固件升級模塊的C工程師另一類是想真正看懂TLS握手報文背后內(nèi)存布局與狀態(tài)機流轉(zhuǎn)的安全方向初學(xué)者。本文不講抽象概念只拆一個能編譯、能調(diào)試、能抓包驗證的最小可運行實例所有代碼基于OpenSSL 1.1.1uLTS版避坑點全部來自某實驗室模擬項目X在ARM32平臺實測翻車記錄。2. 從零構(gòu)建HTTPS客戶端SOCKET連接、SSL上下文初始化與TLS握手全流程2.1 創(chuàng)建TCP SOCKET并完成基礎(chǔ)連接HTTPS通信始于標準TCP三次握手。OpenSSL本身不負責(zé)網(wǎng)絡(luò)I/O它只接管已建立的socket描述符。因此第一步必須用原生socket API完成DNS解析、地址族選擇、連接建立并嚴格控制超時——這是很多教程忽略卻導(dǎo)致線上“偶發(fā)卡死”的根源。#include sys/socket.h #include netdb.h #include unistd.h #include errno.h #include string.h int create_and_connect_socket(const char* hostname, int port, int timeout_ms) { struct addrinfo hints {0}, *result NULL; hints.ai_family AF_UNSPEC; // 支持IPv4/IPv6 hints.ai_socktype SOCK_STREAM; hints.ai_protocol IPPROTO_TCP; int ret getaddrinfo(hostname, NULL, hints, result); if (ret ! 0) { fprintf(stderr, getaddrinfo failed: %s\n, gai_strerror(ret)); return -1; } int sock_fd -1; for (struct addrinfo* rp result; rp ! NULL; rp rp-ai_next) { sock_fd socket(rp-ai_family, rp-ai_socktype, rp-ai_protocol); if (sock_fd -1) continue; // 設(shè)置連接超時關(guān)鍵避免阻塞數(shù)分鐘 struct timeval tv {timeout_ms / 1000, (timeout_ms % 1000) * 1000}; if (setsockopt(sock_fd, SOL_SOCKET, SO_SNDTIMEO, tv, sizeof(tv)) 0 || setsockopt(sock_fd, SOL_SOCKET, SO_RCVTIMEO, tv, sizeof(tv)) 0) { close(sock_fd); continue; } // 強制綁定端口為0內(nèi)核自動分配 if (connect(sock_fd, rp-ai_addr, rp-ai_addrlen) 0) { break; // 成功 } close(sock_fd); sock_fd -1; } freeaddrinfo(result); return sock_fd; }邏輯說明getaddrinfo()替代過時的gethostbyname()支持雙棧SO_SNDTIMEO和SO_RCVTIMEO必須同時設(shè)置否則SSL_connect()可能因底層read/write阻塞而無法響應(yīng)上層超時循環(huán)遍歷addrinfo鏈表是為了兼容IPv4/IPv6雙棧環(huán)境避免因DNS返回AAAA記錄但本地?zé)oIPv6路由導(dǎo)致連接失敗。2.2 初始化SSL_CTX選擇協(xié)議版本、加載根證書、啟用SNISSL_CTX是OpenSSL的全局上下文承載TLS策略、密碼套件、證書存儲等核心配置。錯誤的初始化會導(dǎo)致握手直接被服務(wù)端拒絕如TLS 1.0已被主流網(wǎng)站禁用或證書驗證失敗。#include openssl/ssl.h #include openssl/err.h SSL_CTX* init_ssl_context(const char* ca_bundle_path) { // 必須顯式指定TLS版本禁用不安全舊協(xié)議 const SSL_METHOD* method TLS_client_method(); SSL_CTX* ctx SSL_CTX_new(method); if (!ctx) { fprintf(stderr, SSL_CTX_new failed\n); return NULL; } // 禁用SSLv2/v3/TLS1.0/TLS1.12024年生產(chǎn)環(huán)境底線 SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION); SSL_CTX_set_max_proto_version(ctx, TLS1_3_VERSION); // 加載系統(tǒng)根證書或指定CA Bundle if (ca_bundle_path strlen(ca_bundle_path) 0) { if (SSL_CTX_load_verify_locations(ctx, ca_bundle_path, NULL) ! 1) { fprintf(stderr, Failed to load CA bundle: %s\n, ca_bundle_path); ERR_print_errors_fp(stderr); SSL_CTX_free(ctx); return NULL; } } else { // 回退到系統(tǒng)默認路徑Linux常見于/etc/ssl/certs/ca-certificates.crt SSL_CTX_set_default_verify_paths(ctx); } // 啟用SNIServer Name Indication否則虛擬主機場景必失敗 SSL_CTX_set_tlsext_servername_callback(ctx, NULL); // 僅啟用不設(shè)回調(diào) SSL_CTX_set_tlsext_servername_arg(ctx, NULL); // 設(shè)置驗證模式要求服務(wù)端提供證書且必須驗證通過 SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); return ctx; }參數(shù)說明TLS_client_method()是OpenSSL 1.1推薦方式比SSLv23_client_method()更安全SSL_CTX_set_min_proto_version()強制最低為TLS 1.2規(guī)避POODLE等漏洞SSL_CTX_load_verify_locations()若傳入NULL作為第一個參數(shù)則嘗試加載系統(tǒng)默認CA路徑但實際項目中強烈建議傳入明確路徑如/usr/share/ca-certificates/mozilla.pem避免不同發(fā)行版路徑差異SNI回調(diào)設(shè)為NULL表示使用默認行為但SSL_CTX_set_tlsext_servername_callback()調(diào)用本身即啟用SNI擴展。2.3 綁定SSL對象、執(zhí)行TLS握手與錯誤診斷SSL對象是每個連接獨占的實例需綁定到已創(chuàng)建的socket fd并觸發(fā)完整握手流程。此處錯誤碼處理是成敗關(guān)鍵——SSL_get_error()返回值不能直接等同于errno。SSL* setup_ssl_connection(SSL_CTX* ctx, int sock_fd, const char* hostname) { SSL* ssl SSL_new(ctx); if (!ssl) { fprintf(stderr, SSL_new failed\n); return NULL; } // 將socket fd關(guān)聯(lián)到SSL對象 if (SSL_set_fd(ssl, sock_fd) ! 1) { fprintf(stderr, SSL_set_fd failed\n); SSL_free(ssl); return NULL; } // 設(shè)置SNI主機名必須在SSL_connect前調(diào)用 if (SSL_set_tlsext_host_name(ssl, hostname) ! 1) { fprintf(stderr, SSL_set_tlsext_host_name failed for %s\n, hostname); } // 執(zhí)行TLS握手 int ret SSL_connect(ssl); if (ret ! 1) { int ssl_err SSL_get_error(ssl, ret); switch (ssl_err) { case SSL_ERROR_WANT_READ: fprintf(stderr, SSL_connect: want read (retry)\n); break; case SSL_ERROR_WANT_WRITE: fprintf(stderr, SSL_connect: want write (retry)\n); break; case SSL_ERROR_SSL: fprintf(stderr, SSL_connect: TLS protocol error\n); ERR_print_errors_fp(stderr); break; case SSL_ERROR_SYSCALL: fprintf(stderr, SSL_connect: syscall error, errno%d\n, errno); break; default: fprintf(stderr, SSL_connect: unknown error %d\n, ssl_err); } SSL_free(ssl); return NULL; } // 握手成功后驗證證書鏈有效性 X509* cert SSL_get_peer_certificate(ssl); if (!cert) { fprintf(stderr, No server certificate received\n); SSL_free(ssl); return NULL; } X509_free(cert); printf(TLS handshake successful: %s\n, SSL_get_version(ssl)); return ssl; }邏輯說明SSL_set_tlsext_host_name()必須在SSL_connect()之前調(diào)用否則SNI字段不會寫入ClientHelloSSL_get_error()返回SSL_ERROR_WANT_READ/WRITE表示非阻塞I/O需重試此時應(yīng)配合select()或poll()實現(xiàn)真正的異步握手SSL_get_peer_certificate()獲取證書后必須調(diào)用X509_free()釋放內(nèi)存否則內(nèi)存泄漏打印SSL_get_version(ssl)可確認實際協(xié)商的協(xié)議版本如TLSv1.3是驗證配置生效的最直接證據(jù)。3. 構(gòu)造HTTP POST請求手動拼接Header、處理Chunked編碼與SSL讀寫邊界3.1 手動構(gòu)造符合RFC 7230的HTTP/1.1 POST報文OpenSSL不解析HTTP只提供加密通道。因此HTTP報文包括Method、Path、Host、Content-Length、Body必須由開發(fā)者嚴格按規(guī)范拼接。常見錯誤是忽略Host頭HTTP/1.1強制、Content-Length計算錯誤、或Body未按application/x-www-form-urlencoded編碼。#include string #include sstream std::string build_post_request(const std::string host, const std::string path, const std::string body) { std::ostringstream req; req POST path HTTP/1.1\r\n Host: host \r\n User-Agent: OpenSSL-Client/1.0\r\n Accept: */*\r\n Content-Type: application/x-www-form-urlencoded\r\n Content-Length: body.length() \r\n Connection: close\r\n // 顯式關(guān)閉避免keep-alive干擾 \r\n body; return req.str(); }參數(shù)說明Host頭必須與TLS SNI一致否則服務(wù)端可能返回400或錯誤虛擬主機內(nèi)容Content-Length必須精確等于body.length()若用strlen(body.c_str())可能因\0截斷出錯Connection: close確保單次請求后連接關(guān)閉簡化狀態(tài)管理User-Agent雖非強制但部分WAF會攔截空UA請求。3.2 使用SSL_write發(fā)送請求與SSL_read接收響應(yīng)SSL_write()和SSL_read()是阻塞式調(diào)用但內(nèi)部可能觸發(fā)TLS記錄層分片。必須循環(huán)調(diào)用直至全部數(shù)據(jù)發(fā)送/接收完畢并正確處理SSL_ERROR_WANT_READ/WRITE。int ssl_write_all(SSL* ssl, const void* buf, size_t len) { const unsigned char* p static_castconst unsigned char*(buf); size_t sent 0; while (sent len) { int ret SSL_write(ssl, p sent, len - sent); if (ret 0) { int ssl_err SSL_get_error(ssl, ret); if (ssl_err SSL_ERROR_WANT_WRITE || ssl_err SSL_ERROR_WANT_READ) { // 非阻塞等待此處簡化為忙等生產(chǎn)環(huán)境應(yīng)結(jié)合select usleep(10000); continue; } else { fprintf(stderr, SSL_write failed: %d\n, ssl_err); return -1; } } sent ret; } return 0; } std::string ssl_read_response(SSL* ssl) { char buffer[4096]; std::string response; int total_read 0; bool headers_done false; size_t content_length 0; size_t content_received 0; while (true) { int ret SSL_read(ssl, buffer, sizeof(buffer)-1); if (ret 0) { int ssl_err SSL_get_error(ssl, ret); if (ssl_err SSL_ERROR_WANT_READ) { usleep(10000); continue; } else if (ssl_err SSL_ERROR_ZERO_RETURN) { // 對端關(guān)閉連接 break; } else { fprintf(stderr, SSL_read error: %d\n, ssl_err); break; } } buffer[ret] \0; response.append(buffer, ret); total_read ret; // 解析HTTP響應(yīng)頭簡單實現(xiàn)查找首個\r\n\r\n if (!headers_done) { size_t pos response.find(\r\n\r\n); if (pos ! std::string::npos) { headers_done true; // 解析Content-Length實際項目應(yīng)使用更健壯的header parser std::string headers response.substr(0, pos); size_t cl_pos headers.find(Content-Length:); if (cl_pos ! std::string::npos) { std::string cl_line headers.substr(cl_pos, headers.find(\n, cl_pos) - cl_pos); content_length std::stoul(cl_line.substr(15)); } } } // 若已知Content-Length只讀取指定字節(jié)數(shù) if (headers_done content_length 0) { content_received ret; if (content_received content_length) break; } } return response; }邏輯說明ssl_write_all()循環(huán)調(diào)用SSL_write()直到全部數(shù)據(jù)發(fā)出避免因TLS記錄層分片導(dǎo)致部分數(shù)據(jù)未發(fā)送ssl_read_response()采用流式讀取先定位\r\n\r\n分離Headers/Body再根據(jù)Content-Length精確截取Body規(guī)避Chunked編碼復(fù)雜性本例不處理Transfer-Encoding: chunked因多數(shù)API已棄用usleep(10000)是簡化版等待生產(chǎn)環(huán)境必須替換為select()監(jiān)聽socket可讀事件。3.3 完整POST調(diào)用示例整合連接、握手、請求、響應(yīng)將前述模塊組裝為可運行函數(shù)輸入URL、參數(shù)輸出HTTP狀態(tài)碼與響應(yīng)體。#include string #include iostream #include cstdlib int https_post(const char* url, const char* post_data, const char* ca_bundle) { // 解析URL提取host、port、path簡化版生產(chǎn)環(huán)境用liburl或正則 std::string url_str(url); std::string host, path; int port 443; size_t https_pos url_str.find(https://); if (https_pos 0) { std::string rest url_str.substr(8); size_t slash_pos rest.find(/); if (slash_pos ! std::string::npos) { host rest.substr(0, slash_pos); path rest.substr(slash_pos); } else { host rest; path /; } } else { fprintf(stderr, URL must start with https://\n); return -1; } // 分離host中的端口如example.com:8443 size_t colon_pos host.find(:); if (colon_pos ! std::string::npos) { port std::stoi(host.substr(colon_pos1)); host host.substr(0, colon_pos); } // 步驟1創(chuàng)建socket連接 int sock_fd create_and_connect_socket(host.c_str(), port, 5000); if (sock_fd -1) { fprintf(stderr, Socket connection failed\n); return -1; } // 步驟2初始化SSL上下文 SSL_CTX* ctx init_ssl_context(ca_bundle); if (!ctx) { close(sock_fd); return -1; } // 步驟3建立SSL連接 SSL* ssl setup_ssl_connection(ctx, sock_fd, host.c_str()); if (!ssl) { SSL_CTX_free(ctx); close(sock_fd); return -1; } // 步驟4構(gòu)造并發(fā)送POST請求 std::string request build_post_request(host, path, post_data); if (ssl_write_all(ssl, request.c_str(), request.length()) ! 0) { fprintf(stderr, Failed to send request\n); goto cleanup; } // 步驟5讀取響應(yīng) std::string response ssl_read_response(ssl); if (response.empty()) { fprintf(stderr, Empty response\n); goto cleanup; } // 提取HTTP狀態(tài)碼簡單匹配 size_t status_pos response.find(HTTP/1.); if (status_pos ! std::string::npos status_pos 100) { std::string status_line response.substr(status_pos, response.find(\n, status_pos) - status_pos); std::istringstream iss(status_line); std::string proto, code_str; iss proto code_str; int status_code std::stoi(code_str); printf(HTTP Status: %d\n, status_code); printf(Response Body:\n%s\n, response.c_str() response.find(\r\n\r\n) 4); } cleanup: SSL_shutdown(ssl); SSL_free(ssl); SSL_CTX_free(ctx); close(sock_fd); return 0; } // 使用示例 int main() { // 假設(shè)CA證書位于/usr/share/ca-certificates/mozilla.pem const char* ca_path /usr/share/ca-certificates/mozilla.pem; https_post(https://httpbin.org/post, key1value1key2value2, ca_path); return 0; }邏輯說明URL解析采用最簡邏輯僅處理https://前綴和端口分離避免引入第三方庫https_post()函數(shù)封裝了全部五步流程調(diào)用者只需傳入URL和POST數(shù)據(jù)SSL_shutdown()是優(yōu)雅關(guān)閉TLS連接的必要步驟發(fā)送close_notify警報避免服務(wù)端認為連接異常中斷printf輸出狀態(tài)碼和Body便于快速驗證。4. 證書驗證與自簽名服務(wù)器對接自定義verify callback與證書鏈調(diào)試技巧4.1 理解OpenSSL默認證書驗證流程與失敗原因OpenSSL默認驗證包含三步1檢查證書簽名是否被其父CA私鑰正確簽署2檢查證書是否在有效期內(nèi)3檢查證書是否被吊銷需CRL或OCSP本例默認不啟用。失敗常見于服務(wù)端證書由私有CA簽發(fā)不在系統(tǒng)CA Bundle中、證書域名與SNI不匹配、證書鏈不完整缺少中間CA。提示用openssl s_client -connect httpbin.org:443 -servername httpbin.org -showcerts可手動抓取服務(wù)端證書鏈并保存為PEM文件用于本地測試。4.2 實現(xiàn)自定義verify callback繞過特定驗證項當對接測試環(huán)境自簽名服務(wù)器時需臨時禁用證書驗證。但絕不能用SSL_VERIFY_NONE——這會完全關(guān)閉驗證存在嚴重安全風(fēng)險。正確做法是實現(xiàn)callback在其中選擇性忽略特定錯誤。int custom_verify_callback(int preverify_ok, X509_STORE_CTX* ctx) { // preverify_ok0 表示默認驗證已失敗我們決定是否覆蓋 if (!preverify_ok) { int err X509_STORE_CTX_get_error(ctx); X509* cert X509_STORE_CTX_get_current_cert(ctx); char subject[256]; X509_NAME_oneline(X509_get_subject_name(cert), subject, sizeof(subject)); // 僅忽略自簽名證書錯誤X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT // 其他錯誤如過期、域名不匹配仍返回失敗 if (err X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) { fprintf(stderr, Ignoring self-signed cert error for %s\n, subject); return 1; // 覆蓋為驗證成功 } // 可擴展忽略特定域名的證書錯誤如測試域名test.local // if (err X509_V_ERR_CERT_NOT_YET_VALID strstr(subject, CNtest.local)) return 1; } return preverify_ok; // 其他情況保持默認結(jié)果 }參數(shù)說明X509_STORE_CTX_get_error()獲取具體錯誤碼X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT是自簽名證書的標準錯誤X509_NAME_oneline()提取證書主題名用于日志return 1表示強制接受該證書return 0則維持拒絕。此callback僅影響當前SSL連接不影響全局CTX。4.3 在SSL_CTX中注冊自定義verify callback將上述callback注入SSL上下文使其在每次握手時被調(diào)用。SSL_CTX* init_ssl_context_with_custom_verify(const char* ca_bundle_path) { SSL_CTX* ctx init_ssl_context(ca_bundle_path); // 復(fù)用之前的初始化 if (!ctx) return NULL; // 替換默認驗證回調(diào) SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, custom_verify_callback); return ctx; }邏輯說明SSL_CTX_set_verify()第二個參數(shù)必須仍包含SSL_VERIFY_PEER否則callback不會被觸發(fā)custom_verify_callback函數(shù)指針直接傳入無需額外參數(shù)若需傳參可用SSL_CTX_set_ex_data()。4.4 調(diào)試證書鏈提取并打印服務(wù)端發(fā)送的完整證書鏈當驗證失敗時打印服務(wù)端證書鏈是定位問題的第一步。以下函數(shù)在握手后獲取并輸出所有證書。void print_peer_cert_chain(SSL* ssl) { STACK_OF(X509)* chain SSL_get_peer_cert_chain(ssl); if (!chain || sk_X509_num(chain) 0) { printf(No certificate chain received\n); return; } printf(Certificate chain (%d certs):\n, sk_X509_num(chain)); for (int i 0; i sk_X509_num(chain); i) { X509* cert sk_X509_value(chain, i); char subject[256], issuer[256]; X509_NAME_oneline(X509_get_subject_name(cert), subject, sizeof(subject)); X509_NAME_oneline(X509_get_issuer_name(cert), issuer, sizeof(issuer)); printf( [%d] Subject: %s\n Issuer: %s\n, i1, subject, issuer); } }邏輯說明SSL_get_peer_cert_chain()返回STACK_OF(X509)*是OpenSSL的動態(tài)數(shù)組類型sk_X509_num()獲取證書數(shù)量X509_NAME_oneline()格式化輸出Subject/Issuer便于人工識別調(diào)用位置應(yīng)在SSL_connect()成功后、SSL_get_peer_certificate()之前。5. 避坑指南OpenSSL HTTPS開發(fā)中5個血淚經(jīng)驗總結(jié)5.1 現(xiàn)象SSL_connect()返回-1SSL_get_error()返回SSL_ERROR_SSLERR_print_errors_fp輸出error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure原因服務(wù)端要求TLS 1.3但客戶端SSL_CTX_set_min_proto_version()設(shè)為TLS1_2_VERSION導(dǎo)致ClientHello中不包含TLS 1.3支持服務(wù)端直接拒絕。解決將SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION)改為SSL_CTX_set_min_proto_version(ctx, TLS1_3_VERSION)并確保OpenSSL版本≥1.1.1。若需兼容老服務(wù)端應(yīng)設(shè)為TLS1_2_VERSION并確認服務(wù)端支持。5.2 現(xiàn)象SSL_read()返回0SSL_get_error()返回SSL_ERROR_ZERO_RETURN但響應(yīng)體為空原因服務(wù)端發(fā)送了Connection: close但客戶端在讀取完Headers后未繼續(xù)讀取Body或Body被分片發(fā)送SSL_read()一次未讀完。解決必須實現(xiàn)循環(huán)讀取邏輯依據(jù)Content-Length或Transfer-Encoding頭判斷Body長度。本例中ssl_read_response()已實現(xiàn)此邏輯切勿用單次SSL_read()。5.3 現(xiàn)象SSL_connect()成功但SSL_get_peer_certificate()返回NULL原因服務(wù)端配置了SSL_VERIFY_NONE或未發(fā)送證書如某些CDN邊緣節(jié)點或SSL_CTX_set_verify()未正確設(shè)置SSL_VERIFY_PEER。解決檢查服務(wù)端是否真發(fā)送證書用openssl s_client驗證確認SSL_CTX_set_verify()第二個參數(shù)包含SSL_VERIFY_PEER若服務(wù)端確不發(fā)證需調(diào)整業(yè)務(wù)邏輯容忍。5.4 現(xiàn)象SSL_write_all()卡死在SSL_ERROR_WANT_WRITECPU 100%原因未對SSL_ERROR_WANT_WRITE做等待機制而是無限循環(huán)調(diào)用SSL_write()導(dǎo)致忙等。解決必須在SSL_ERROR_WANT_WRITE分支中加入usleep()或select()等待socket變?yōu)榭蓪?。本例中usleep(10000)是底線方案生產(chǎn)環(huán)境必須用select()。5.5 現(xiàn)象自簽名服務(wù)器對接成功但切換到正式環(huán)境后SSL_connect()失敗錯誤為unable to get local issuer certificate原因init_ssl_context()中ca_bundle_path為空回退到SSL_CTX_set_default_verify_paths()但該函數(shù)在某些嵌入式系統(tǒng)中無法自動定位CA Bundle路徑。解決永遠顯式傳入CA Bundle絕對路徑如/etc/ssl/certs/ca-certificates.crt并在程序啟動時校驗該文件是否存在且可讀??商砑觓ccess(ca_bundle_path, R_OK)檢查。6. 進階技巧用Wireshark抓包驗證TLS握手細節(jié)與HTTP明文還原6.1 配置Wireshark解密TLS流量導(dǎo)出SSLKEYLOGFILEOpenSSL支持將TLS主密鑰輸出到文件Wireshark可據(jù)此解密HTTPS流量。這是驗證握手是否成功的黃金標準。# 編譯時鏈接OpenSSL并在代碼中添加 #include stdlib.h // 在SSL_CTX_new之后、SSL_connect之前插入 putenv(SSLKEYLOGFILE/tmp/sslkeylog.log); # 運行程序后Wireshark打開捕獲文件進入 Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log filename # 設(shè)置為 /tmp/sslkeylog.log重啟Wireshark邏輯說明SSLKEYLOGFILE是NSS和OpenSSL通用的密鑰日志環(huán)境變量Wireshark通過該文件中的CLIENT_RANDOM行匹配TLS會話從而解密所有記錄層數(shù)據(jù)此方法無需服務(wù)端私鑰完全客戶端可控。6.2 Wireshark中定位關(guān)鍵握手報文與HTTP明文解密成功后在Wireshark過濾器中輸入tls.handshake.type 1ClientHello、tls.handshake.type 2ServerHello、http即可查看明文HTTP請求/響應(yīng)。過濾表達式作用典型驗證點tls.handshake.type 1ClientHello檢查supported_versions是否含TLS 1.3server_name是否為預(yù)期域名tls.handshake.type 2ServerHello檢查version是否為TLS 1.2/1.3cipher_suite是否為預(yù)期如TLS_AES_128_GCM_SHA256http.request.method POSTHTTP請求確認Host頭、Content-Length、Body內(nèi)容與代碼生成一致http.response.code 200HTTP響應(yīng)查看Content-Type、Content-Length及Body是否完整參數(shù)說明tls.handshake.type是Wireshark解析TLS握手類型的字段http.request.method直接過濾HTTP方法無需關(guān)心TLS加密層通過對比Wireshark明文與代碼build_post_request()輸出可100%確認HTTP報文構(gòu)造無誤。6.3 用OpenSSL命令行工具驗證證書鏈與握手脫離代碼用OpenSSL命令行快速驗證服務(wù)端配置# 1. 獲取服務(wù)端證書鏈并保存 openssl s_client -connect httpbin.org:443 -servername httpbin.org -showcerts /dev/null 2/dev/null | sed -n /-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p server_chain.pem # 2. 驗證證書鏈是否可信使用系統(tǒng)CA openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt server_chain.pem # 3. 測試TLS握手不驗證證書僅看是否連通 openssl s_client -connect httpbin.org:443 -servername httpbin.org -verify_quiet -ign_eof /dev/null邏輯說明-showcerts輸出全部證書sed命令提取PEM格式證書塊openssl verify用指定CA Bundle驗證證書鏈有效性-verify_quiet靜默證書驗證錯誤-ign_eof忽略EOF便于觀察握手過程這些命令可在目標設(shè)備上直接運行是現(xiàn)場排障利器。從那以后我每次在嵌入式平臺集成OpenSSL HTTPS都強制走一遍Wireshark抓包openssl s_client驗證流程哪怕多花10分鐘也比上線后抓不到日志、客戶投訴“接口時通時不通”強百倍。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美性天天影视| 久久一区二区加油站| 色呦呦国产精品免费看| 亚洲日产专区婷婷| 麻豆天美国美国产| 欧美网站免费| 97人人操人人摸人人爱| 无码精品久久久久久亚洲| 国产精品一区二区后入| 91在线丝袜视频| 婷婷视频网| 内射老妇BBWX0C0CK| 蜜臀久久99精品久久久久久| 日本不卡一区二区三区| 嗯~啊~快点 死我视频| 五月丁香综合| 综合色图区| 亚洲aV无码成人在线观看| 国产午夜精品理论片a大结局| 久久久久9| 五月婷婷hd| 欧美日韩成人在线| 日本三级黄页| 大地资源在线观看中文第二页| 精品视频在线观看精品| 91亚州| 久久久久国色αv免费观看| 粉嫩小泬久久久一区二区| 暖暖精品二区三区观看| 99999精品成人| 99久久9| 国产成人精品日本视频| 亚洲成人免费在线| 香蕉久久国产AV一区二区| 亚洲成人福利电影免费| 国产福利在线视频网站| 啪啪视频亚洲第一| 伊人亚洲国产一成人久久精品,久久| 亚洲欧美日韩精品久久久一区二区| 国产精品分类在线观看| 乱操乱伦AV| 涩涩这里只有精品视频| 中文字幕乱在线伦视频中文字幕乱码在线| japan日本高清乱xxxx| 国产精品白丝在线播放| 日本免费一级AAA大片器| 一级婬片120分钟试看| 久久国产逼| 国产无码精品成人| 99在线免费公开视频| 超碰成人公开| 婷婷丁香在线| 97色爱| 青青欧洲黑| 福利大香蕉| 啊啊啊啊啊舒服| 久久婷婷一区| 国产操逼网站亚洲一级黄色| 伊人丁香五月婷婷| AV九九| 欧美九九爱| 蜜色网色哟哟| 碰人碰碰人人开房人肉| 久久99国产精品| 色综合一本| 370p日韩欧美亚洲精品| 久热91| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 亚洲一本大道中文字幕无码在线| 丝袜夫妻自拍| 日韩十八禁| 国产美女自拍AV| 柠檬AV导航| 美女诱惑1区2区| 日韩欧美资源| 啊啊啊啊啊啊好多水| 久久这里只精品免费福利| 波多野42部无码喷潮在线观看| 强奸乱伦大香蕉网| 操b网站亚洲无码| 精品人妻久久久久一区二区三区| 韩国手机不卡无码三级视频| 熟女精品一区二区三区| 成年人免费观看网站| 色爱亚洲| 免费综合亚洲中文| 婷婷香网站| 嗯嗯不要 视频| 97在线视频观看网站| 国产日本久久免费精品| 麻豆天美在线喷水AV| 无码78| 亚洲最大网站av| 久久97资源 网| 综合五月天| 亚洲导航深夜福利| 久久偷偷色综合蜜桃| 午夜αv| 欧美少妇性爱网站| 牛牛久久国产精品视频一二三| 日韩欧美三级| 免费精品福利在线观看| 婷婷香网站| 九九AV| 十八禁啪啦拍视频无遮挡| 日本精品88888888| 91看黄片| 久久99手机免费视频| 九九九九九九九九九国产精品 | 欧美日产国产在线成人第一区| 激情五月婷| 中文字幕人乱码中文字的预防方法| www.男人的天堂| 五月婷婷久久综合| 欧美最婬乱婬爆婬牲视频| 国产日韩欧美亚洲精品95 | 明星性猛交ⅹxxx乱大交| 丁香五月大香蕉| 亚洲偷91色| 93人人操人人| 国产高清在线自在拍69| 国模无码一区二区三区在线| 欧美成人国产精品| 丁香色五月 97干| 日本久久久精品电影| 18禁免费视频| 中国黄色特级精品一区二区三区片| 欧美一级美片在线观看免费| 一区中文字幕二区日韩| 久久透逼视频| 易易A毛视频| 俺去也婷婷| 91欧美色| 天天看人人操屄犊摸阴| 久久久久久国产无码精品| 精品一国2| 欧美人妻久久精品二区三区| 青草一区二区| 亚洲综合113页| www..com操老师| 欧美亚洲清纯| 综合影院亚洲| 性影在线视频| 99热这里都是精品| 啊嗯好大视频在线观看| 在线观看岛国有码| 老司机福利青青草| 久久久久大香青草精品综合| 九九热三级片| 九九九久千久久激情蜜桃在线看 | 欧美 牲| 欧美极度丰满熟妇hd| 国产精选视频| 久草视频制服诱惑| 亚洲欧美国产其他二区| 亚州综合色| 色香伊人| 婷婷美人网| 国产成人无码网站在线视频| 91天天| 91男同| 大香交伊人网| 密乳AV免费观看| 国产一区二区在线看| 国产天天骚| 久久精品国产72国产精品福利| 亚洲人妻精品一区二区| 五月开心久久AV官网| 亚洲午夜av| 大屁股人妻女教师撅着屁股| 99re视频在线播放青草| 色妇91| 欧美伦乱爱| 日韩精品99999| 99re公开精品免费视频| 亚洲阿v天堂在线| 日本超碰色精品| 狼人综合婷婷激情四射| 久久曰曰| 无遮挡h肉动漫在线观看| 另类小说综合网| 草草草视频| 欧美激情精品久久久| 久九干| 色综合色| 亚洲精品久久久久久久蜜桃臀| 亚洲 欧美 精品专区 极品| 欧美九九九| 蜜屁Av| 蜜臀在线免费观看在线免费观看| 大香蕉综合网| 天天干,夜夜爽| 亚洲无码久久久久久久| 国产精品黄色三级av| 极品销魂美女一区二区 | 99re黄| 久久久内射良家| 欧美韩国你懂得在线 | 青青草久久| 日韩99神马视频播放| 色综合98| 在线 欧美 亚洲| 欧美超碰人妻97| 日本日日色视频| 91女网站| 国产精品欧美激在线| 久久综合18p| 后入 亚洲 美女 射| 五月激情影院| 超碰亚洲欧美日韩无| 激情婷婷五月天| 日韩在线76| 亚洲人妻久久久| 碰碰在线视频| 亚洲五月丁香花狠狠干一区二区三区| 亚洲国产一区二区入口| 97色碰| 404操逼福利视频| 国产美女销魂在线观看不卡| 综合伊人激情| 国产高清MV操逼视频| 极品尤物女神在线观看| 五月天黄色激情视频| 久精品无码av一区二免费国产在线观看| 宅男影院久久久,99| 大香蕉免费3| 一类无码操逼视频| 中文字幕三四区| 人妻少妇无码| 网站A V在线| 91伊人久| 天天干天天操天天干天天操| 色婷婷五月综合激情中文字幕| 黄色高清无码无码破解免费暗网 | 婷婷五月天无码| 熟女高潮合集-永久久久-成人AV | 国产吹潮女在线观看| 国产精品人妻免费精品| 国产福利精品98视频| 亚洲欧美在线综合| 四虎精品永久在线观看| 亚洲高清欧美总合| 免费操逼91| 91色堂| 国内一区二区三区| 国产超碰国产97| 久久久久99精品成人片蜜臀| 久久久久久九九九九九| 亚洲黄色视频在线观看视频| 综合久久六月久久婷婷| 综合久草| 久久精品日韩专区免费观看| 三级日韩一区二区三区| 婷婷亚洲五月***久久| 日韩另类色图| 日夜精品| 亚洲精品成人激情在线| 日韩精品熟妇| 熟妇女伦乱视频| ji熟女.com| 亚洲午夜免费狠狠干| 国产熟女精品区| 精品日韩| 99热超碰在线| 蜜乳av一区二区三区四区不卡| 91少妇人妻| 亚洲欧美在线观看2021 | 久草婷婷| 肥臀熟女一区二区三区视频| 国产精品女生av| 国产欧美日韩女同性恋ww喷水精品| 天天澡天天狠天天天做| 入口操逼网站| 亚av顶级裸体一区二区三区四区五区| 91亚洲高清| 97天堂| 97超碰色中文字幕| 一,爱啪啪,在线免费视频| 精品一级| 91视频观看网站| 亚洲成人性爱网站在线播放| 天天日天天屌天天操| 国产欧美日韩一区二区三区| 婷婷丁香六月天| 91精品微拍福利| 可以免费看黄片的视频| 极品五月天噜噜| 亚洲双插| 性爱久久| 久9精品| 九九无码视频| 青草精品视频日本久久久久网站在线| av九九| 人妻丰满熟妇av无码区蜜桃| 激情综合婷婷| 亚洲偷91色| 精品无码不卡视频| 一本色道久久综合狠狠操| 日韩激情啪啪啪| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 影音先锋视频在线| 在线情色电影 91大 | 日本 欧美 国产一区| 超碰97导航| 国产精品久久久久久片| 97欧美日韩精品| 性爱乱伦一区| 精品78| 久久超碰亚洲人| 人人贴人人摸| 怡红院久久老司机| 高清孕妇孕交 交| 国产av尤物| 五月婷亚洲精品天堂| 三级三级三级日本99| 国产传媒操逼视频| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 好爽,再快点啊哈嗯嗯嗯嗯| 一区| 国产精品呦一区二区三区| 精品久久久久久久久久久久| 国产操逼逼网| 亚洲美女AV无码| 91久久精品蜜臀| 玖玖综合.com| 久久亚洲中文字幕视频| 欧美激情一区| 成人精品一区二区三区| 国产乱伦一二三区| 超碰成人人人爽人人爽| 国产丰满熟夫69mpp| 伊人影院综合是一个与深夜成人在线| 欧美激情精品久久久| 妺妺跟我一起洗澡没忍住| 欧美综合另类| 另类成人首页一区| 97超碰jingpin| 影视综合无码少妇| 视频国产欧美在线播放| 精品人妻一区二区三区蜜桃视频| 性色乱AV一区二区| 无码抄逼网| 日韩另类色图| 亚洲欧综合另类无码一区| 水滴偷拍| 国产精品日日摸天天碰| 蜜臀久久久国产| a人欧美综合天堂麻豆| 亚洲色图片区| www.91欧美| 五月综合久久| 深夜国产一区二区三区在线看| 国产精品一区二区三区在线| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 五月天色色网站| 国产传媒午夜理伦精品| 综合色好色| 亚洲国产精品久久久久婷婷老年| 91国产大片| 蜜桃成人1区2区3区| 日韩欧美字幕亚洲一区二区| 成人免费视瓶| 超碰97欧美| 亚洲天堂少妇| 欧美亚洲首页| 国产美女91| 九9热伊人| 蜜桃久久久久久久久久久久| 97色爱| 日韩久久三区| 国产黄a三级三级三级av在线看| 91网站18+| 色色热| 久草成人福利导航| 日本熟妇人妻中出视频| 亚洲综合影视| 无码人妻精品一区二区中文 | 成人一道本免费视频| 亚洲骚逼少妇| 97极品无码| 91美女精品| 欧美,日韩,中文,另类| 久久久内射良家| 99re这里| 亚洲女人毛茸茸91| 久久久久成人网| 蜜汁欧美| 久草这里只有精品| 国产精品96| 精品视频在线观看| 欧美18 在线观看| 男人的天堂com| 嗯嗯嗯好爽| 婷婷九月国产| 尤物视频偷拍免费| 91高清日| 日韩超碰97| 美女天天干| 成人五级久久| 天天色综亚洲91污| 色播五月丁香| 97色香蕉| 日韩亚洲欧美中文字幕| 无码一区免费在线不卡| 国产人妖视频一区在线观看| 日本三级日本三级99| 夜夜一区二区| 97一区二区三区视频| 97欧美色| 97视频在线播放| 性爱视频免费网址| 日韩一级片| 老女人爆菊| 无码视频一区二区| 大逼色网站| 亚洲国产精品久久AV| 亚洲欧洲无码bt精品合集| 精品久久久久久中文| 久久婷婷热| 国产精品熟女AV中文字幕在线播放| 人人摸人人干| 欧美热图99| 无码精品久久| 激情深爱五月天| 偷拍超碰| 中文乱码字幕观看视频| 18禁中文字幕| 精品久久久久,69国产成人精| 超碰99热中文字幕| 亚洲视频精选| 人妻丰满熟妇一区二区三| 高清国产性猛交xxxx乱大交| 大香蕉黄色一区| 日韩国产十八禁| 国产9熟妇视频网站| 国产av激情无码久久天堂| 国产精品亚洲免费| 亚州色国| 中文字幕日韩专区精品系列| 天天欧美欧美亚洲网| 亚欧洲一区二区视频| 婷婷超| 99日精品欧美国产| 99热8| 在线播放成人高清免费视频| 九九九九久久久| 日本高清一本二本免费不卡| 亚洲 一区二区 自拍| 亚州乱码中文字幕综合久久久| 欧洲综合色| 天天视频综合在线观看视频| 色香伊人| 国产51色综合久久免费| 今日头条成人一区二区三区四虎精品| 91色香| 婷婷五月天福利| 2020中文在线一区二区三区| 国产91精品久久久久久久网曝门| 国产强奸乱伦无码视频| 国产不卡片| 91精品导航| 一级免费啪啪片| 屁股久久久久久久久| 一级特黄aaa大片在线观看成人一级片在线观看 | 亚洲中文日韩欧美大香蕉视频| av在线人气| 大色综合| 麻豆性爱视频在线播放| 97av,com| 91久久久久久| 精久久久91| 啊啊啊啊嗯嗯嗯用力好爽 | 久久综合乱子伦国产免费| 久久久久女教师免费一区| 日韩午夜啪啪视频| 97久久久网站| 精品 码产区一区二-1080P高清在线www-B029AV| 五月天亚洲网| 亚洲国产欧美中日韩成人综合视频| 青青伊人久久| 伊人色综合网电影| 日本道人妻久久久在线不卡色视频| 99热在线观看| 啊啊啊免费视频| 日韩草久视频| 日韩成人精品| 欧美,亚洲,日韩,v,天堂,手机在线观看| 国产欧美岛国精品一区 | 日本福利二区视频| 东京热毛片177b2viP| 6080yy午夜理论三级一区二区三区无码| 九九九九9999| m欧洲一级午老| 激情视屏国产乱伦强奸| 97欧美综合网| 精品国产一区探花在线观看| 欧美老妇女内射网址| 乱伦Av网| www亚洲欧美| 欧美 传媒 麻豆 日韩 偷拍| 91爆操视频| 亚洲无码一区成人免费午夜| 粘花网06av视频| 岛园激情| 国产精品高清2021在线| 啊啊啊啊,啊啊好多水| 五月花婷婷| 国产综合在线视频网站| 久久亚洲一区二区色婷婷| 花野真衣| 欧美强奸一区二区诱惑| 亚洲色婷婷久久91| 免看60秒涩涩视频| 天天摸夜夜摸| 国产超碰人人操| 国内毛片热久久思思热| 中文字幕青青草| 97色欧州| 国产乱码久久| 极品极品色影院| 亚洲欧洲自拍图片专区满春格| 久久精品综合| 亚洲成人色情五月天丁香花| 性站| 99热只有这里有精品| 久久男人天堂| 国产日韩怡红院| 啊啊啊啊啊啊啊在线| 99啪| 欧美拳交在线播放| 亚洲第一无码播放立川理惠| 国产在线视频二区| 激情小说亚洲色图| 哈哈操电影| 中文熟女五十乱码在线| 成人欧美日超碰| 人人爽夜夜操| 久都青青视频| 志村玲子视频一区二区| 国产67194| 破苞ⅩXXX性无码动漫无码| 欧美性爱18观看| 国产精品乱码久久久久| 欧美欧美少妇| 亚洲综合色图欧美| 91熟女视频网| 国产精品69久久久久孕妇欧美 | 在线综合网| 久久99国产精品| 亚洲综合色图欧美| 中文字幕国产| 国产精品午夜福利| 91美女视频直播| 99精品综合久久久久五月天| 九九九久| 婷婷丁香人妻 | 91美女小视频| 中欧人妻丝袜中文字幕| 久久夜夜| a亚洲欧美色欲| 国产精品高潮久久久无码| 大香蕉中文| 丁香九月婷婷| 在线中文字幕| 成人精品一区二区91毛片不卡| 国产操伦| 蜜臀操逼黄色视频操的好爽| 色青青久久影视| 婷婷久久网| 老女人爆菊| 成人熟女视频一区二区三区| 超碰97男人| 欧美78| 青青草一区二区三区四| 99操逼| 亚洲天堂男人的天堂| 成人毛片免费| 成人激情无码在线视频| 色色婷| 日韩伦理久 久久 清纯| 级品肉射| 精品人妻久久久久一区二区三区| 超碰97亚洲| 吖在线不卡一区二区国产剧情| 操逼啊啊啊91| 久久午夜伦| 九热大香蕉| 少妇精品久久久八区九区| 亚洲综合网91| 午夜视频好爽啊| 不卡免费av在线播放 | 秋霞怕怕片| 欧美精品日韩久久久九| 91久久久久久| 91五月天| 91熟女在线| 福利操逼| 91亚·色| 97精品视频在线播放| 男人久久天堂| 丝袜熟女一区二区三区| 欧美性爱97超碰 | a在线观看| 美女大乳久久久久久久女人18| 久久久久国产精品人妻aⅴ天堂| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 精品一区二区人妖| 日韩美女久久一区二区三区| 久久久久极品| 久久综合国产精品国产| 日韩欧美视频青青| 欧美色图在线视频少妇| a亚洲欧美色欲| 丁香五月性爱| 色香欲天天天天综合色| 92性色国产午夜福利在线661 | 亚洲97精品| 成人5码视频| 欧美性,色九九| 色香综合| 色综合久| 熟女中出视频| 伊人久久国产免费观看视频| 超碰 另类 欧美| 99精品伊人| 亚洲国产综合图区中文字幕 | 韩国三级理论在线| 夜夜骑天天燥| 欧美Aⅴ| 婷婷五月天补不补| 国产搭汕a级片| 日韩精品永久在线观看| 色综合20p| 日韩亚洲精品一区二区| 天天综合欧美综合| 亚洲 欧美 精品专区 极品| 中文字幕 码 自拍 视频 区| 色噜噜狠狠色综无码久久| 韩国黄片aaaa| 天天影视之亚洲综合网| 亚洲欧综合另类无码一区| 亚洲天天影视综合网| 中文字幕黄片在线| 午夜欧美J进J出白浆流出久久久| 国产精品人妻免费精品| 超碰爽人妻熟女Av| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲天堂久久| 91久| 免费夜夜爱黄色视频毛片| 欧美—性—交—色| 大奶啊啊好爽| 一级性爱网| 日本不卡三级网在线播放| 中文字幕丰满人妻日本| 欧美日日夜夜| 97在线视频观看网站| 欧美韩日精品资源| 欧美成人午夜免费福利785| 大香蕉性欧美| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 无码视频一区二区| 夜嗨影院| 東南亚性呦成人伦理资源在线视频| 成人国产精品三级A片| 麻豆尤物视频网| 日韩人体偷拍| 国产隔壁老王影院在线| 日日日大屁股骚女人精品| 蜜臀AV网站| 美女网站91| 欧美黑人与女人91~| 大黄片做爱的大的| 嗯嗯嗯啊啊在线观看| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 成人一级二级| 91色综| 日韩熟女操逼| 97中文字幕一区| 欧插网站| 久久久精品视频免费观看| 伊人超碰97| 成人天天看站长推荐| 黄片不用下载在线观看| 啊啊啊好多水| 99热国产精品| 亚洲情色一区综合| 国产麻豆一级精品视频| www国产无码| 夜夜免费视频| 在线女人91| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧美熟女丝袜| 九九热免费国产视频婷婷伊人| 国产日韩色综合| 特污精品女优骚货黄色视频在线免费观看| 欧美久久婷婷| 67914亚洲精品| 亚洲欧美中文一区二区三| 夜夜精品视频| 日韩综合色网| 欧美日韩少妇色情| 国产久久一区二区午夜| 色久桃花影院在线观看| 国产强奸乱伦第1页| 欲色啪| 啊啊啊啊啊好大好舒服想要| 天天日天天插| 少妇干B| 免费福利视频中文字幕| 亚洲欧洲激情卡通另类文学四射小说网站 | 蜜桃成人1区2区3区| 5278欧美一区二区三区| 成人无码在线视频网站| 欧美综合亚洲综合| 欧美97av| 加勒比性爱成人在线| 国产午夜视频| 韩国轻伦国内自拍一区| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 日本一区二区不卡精品| 日韩精品一区二区三区色欲| 美国精品国产精品| 亚洲春色一区二区三区| 精品传媒在线一区| 蜜臀网址在线| 超碰 国产熟女精品一区| 丝袜视频一区二区在线播放国产中文| 色播五月丁香| www久久久| WWW黄片COM| 全免费a敌肛交毛片免费| 午夜啪啪片| 隔壁邻居波多野结衣中文字幕 | 黄aaaaaaaaaaaaaaaaaa色网站| 91丨九色丨国产丨人妻在线| 成人小说另类在线| 韩国三级一线观看久| 亚洲精品久久久久毛片A片拉屎 | 成片免费观看视频大全| 日韩精品黄片免费观看| 强奸乱伦Av网| 户外裸露刺激视频第一区| 一本大道不卡一二三区| 中文字幕中文字幕一区二区| 性影在线视频| .精品人妻一区二区三| 久久人| 少妇久久久久| 国产肏逼网站| 久久中出| 97亚洲在线| 偷偷人人精品女女久久| 国产精品久久蜜乳av| 国产精品天堂| 国语av狠狠色丁香婷婷综合激情| 91热| 91色色网站| 人人贴人人摸| 美国一区二区免费视频| 婷婷综合久久| 韩国轻伦国内自拍一区| 欧亚日韩三区| 日本高清视频在线观看黄已三辽| 久久精品国产亚洲粉嫩| 农村女一级毛卡片| 啪啪啪东京| 欧美日韩中国x| 欧美老熟另类| 夜夜草我| 国产精品自拍欧美在线| 久久精品人体| 大香蕉2017| 日本影视久久免费| 亚洲AV永久无码精品成人调教| 日产国产精品中文久久婷婷| 欧美 日韩 另类 亚洲| 很狠操| 久草免费在线视频| 操逼视频国产无套| 秋霞欧美性爰视频| 男人天堂站| 热热色色综合| 日日夜夜精品视频| 日本免费中文字幕在线| 久久精彩免费视频| 久久久不卡区一区二区三区久久久| 综合97久久| 在线观看中文字幕| 无码免费精品高清| 夜夜高潮夜夜爽高清视频一| 精品中文一区二区| 91在线视频国产网站| 日韩精品 视频一区二区| 欧美日韩丝袜 | 午夜操一操| 欧美日韩香蕉| 亚洲精品国产AV天美传媒| 国产夫妻性生活视频| 亚洲AV麻豆Aⅴ无码电影一| 国产在线视视频有精品| 麻豆AV短剧| 日韩小电影| 欧美一级做a爰片免费视频| 丝袜性亚洲| 变态综合色| 黄色高清无码无码破解免费暗网| 夜夜操av亚洲一区二区| 欧美人妻制服| 日韩黄色成人性爱| 欧美精品三区| 人人干人人操人人爱| www.超碰| 婷婷丁香人妻| 中文字幕精品资源在线| 一区二区视频你懂的| 99精品国产户外露出| 爽爽淫人网| 久久婷婷苹果| 女人喷水视频在线观看| 青青草啪啪网| 日本操逼视频在线| 九九九国产精品| 久久久久久一日韩字幕无码| 九九久久首页| 超碰97色| 97人肏| 欧美亚洲图片| 色婷婷丁香五月| 欧美综合色图片| 秋霞一级视频在线观看免费| 美女91色黄18| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 国产精品成人蜜臀AV在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 欧美高清色| 色综合久| 一区二区影视| 99热超碰| 天天上日日上日韩精品| 亚洲男人天堂2012| 亚洲色欲天天天堂色欲网女| 男人的天堂色偷偷青青草视频婷婷网| 欧美亚洲自拍另类人妻| 99热在线不卡| 淫荡熟女乱伦网| 97干综合网| 立川理惠无码一区二区| 亚洲中文字幕一区二区| 欧美视频在线第3页| 亚洲国产成人综合碰碰三级经典| 高清不卡视频| 操婢日韩| 成人夜夜| 欧美午夜精品久久久久久3D| 新亚洲无码| 久久久熟妇熟女国产| 人人人人插| 亚洲情色 自拍| 大鸡巴久久久| 久久亚洲欧美中文字幕国语| 蜜桃丰满熟妇av无码区不卡| 五月天色图| 免费人成毛片乱码| 狠操91,com| 五月天激情国产综合婷婷婷| 在线日韩精品一区二区三区| 91AV天堂| 久久精品国产精品亚洲艾通辽熟妇| 污色区网站| 秋霞福利网| 久久黄黄| 亚洲AV噜噜狠狠网址蜜桃动漫| 99色在线| 国产天天骚| 亚洲一区二区性爱电影| 91亚洲电影| 人妻少妇精品久久久| 欧美日综合| 国产精品探花色| 日本一二三免费久久| 英伦大奶子熟妇吊带| 首页中文字幕中文字幕免费| 欧美一二三| 五月天欧美色图| 久久久久久久久久久久久久久性生活视频 | 久艹免费| 伊人一区二区三区| 久久色情| 国产女乱淫真高清免费视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 中文字幕超碰CAO| 婷婷啪啪| 久干9操| 国产一级舔足在线观看| 亚洲素人综合| 麻豆性爱视频在线播放| 人妻久久久| 欧美大香蕉同搞| 黄色无码高清黄色无码网站| 久久精品成人| 久久亚洲色图中文字幕| 亚洲精品色| 另类图片五月天| 国产日韩在线播放| 亚洲国产精品99久久久| 亚洲天天综合| 0755午夜福利视频| 色阁阁AV综合网| 狠肏骚人妻| 久久人人妻| 久久人妻办公室视频| 國產尤物AV尤物在線觀看| 老子午夜伦不卡影院| 91丝袜在线观看| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 岛国AB视频| 男女激烈网站最新| 国产精品农村妇女| 99国产在线 精品 视频| www.超碰在线| 国产强奸AV在线| 亚洲欧美不卡线| 九九热精品视频六| 91久热| 97精品视频在线播放| 人妻人妻天天碰| 婷婷精品国产一区二区三区日韩| 91女网站| 青青欧美在线| 国产又黄又猛又粗又爽的网站| 色吧五月| 伊人91| 男人天堂2012| 殴美,日韩国产伦精品| 黑丝内射一区二区三区| 人妻丝袜无 码视频专区| 亚洲综合激情五月久久| 天天爽天天操| 色五月婷婷五月天| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 日产操逼| 亚洲欧洲自拍图片专区满春格| 精品视频一区二区| 日本人妻最新在线中| 午夜啪| 亚洲图片色图欧美另类| 欧美一级特黄淫片在线观看| 淫荡少妇免费| 国产福利影视| 操碰97| 久久久久久久 九九九九九九九| 日韩精品三区四区| 欧美高潮在线| 欧美最大综合网| 天天日天天干天天摸天天操| 亚洲人综合19| 99热国产| 撸无码不卡免费视频| 先锋激情∨在线视频播放| 91精品久久久久五月天精品| 亚欧视频在线| 3p国产欧美99热| 日韩免费人妻色情网站| 嗯~啊~快点 死我视频| 9热9热综合网| 日本久久999| 欧美78P| 精产国品一区二三产品| 国产强上视频在线观看| 五月丁香色色网| 色噜噜国产在线| 加勒比海成人视频网| 啊啊啊啊,啊啊好多水| 91亚洲情色| 人妻一区二区三区视频| 亚洲av无线观看| 五月天社区| 91精品久久久久久77777| 国产精品婬乱一级毛片彝族| 淫荡熟女乱伦网| 麻豆精品.欧美精品.日韩精品.| juliaann精品熟女一区| 日韩精品第3页| 精品一区二区三区蜜桃| AV麻豆免费一区| 干婷婷综合网| 看黑人AV不卡| 超碰偷拍| 操B视频日韩无码| 国产精品国产拍高清AV| 天天日日本| 青青久草| 人人操人人摸人人看人人干| 91亚洲人电影| 一本色道久久综合亚洲二区三区| 日本孕妇一区二区视频操逼免费看| 美国日韩黄色片| 欧美性爱一内片一区二区三区| 中文字幕在线第二页| 免费A片三p视频| 九九99精品视频在线观看| 久草在| 欧美性xxxxx狂欢| 操逼日韩无码| 夜夜 中文视频rt| 国产又粗又大硬免费色网视频| 国产呦精品一区二区三区下载| 天天做天天爱天天爽AV| 91日韩国产欧美亚洲另类精盘州至城都| 亚洲成人性爱网站在线播放| 欧美性天天影视| 97在线播放| 中国国产精品一区视频| 精品v1区| 欧美综合天天| 99热网站| 美女爽到高潮91| 亚洲图片欧洲图片aⅴ| 99热aaa| a片自拍直播视频| 黑操B| 丝袜 中出 制服 人妻 美腿 中文字幕| 高清成年美女黄网站免费大全| 97硬碰| 2017av无码免费无线播| 91在线页| 综合久久2017| 丝袜美腿欧美| 九九热三级片| 家庭乱伦网站国产| 男人的天堂三级| 久久久久久久国产视频| 日韩电影天堂视频二区三区| 午夜福利一区二区影院| 香一区二区三区| 国产精品com| 天天操女人| 女人精品内射国产99| 性欧美另类高清| 91丝袜在线观看| 操人妻丝袜高跟| 国产女同在线观看视频| 99国产天美| 国产三级在线现体验区| 麻豆人妻少妇在线免费观看| 亚洲AV无码乱码| 偷拍在线观看视频| a天堂视频| 密臀国产在线| 婷婷五月天av| 在线视频97| 欧美72网页| 日韩丰满熟妇| 91蜜桃传媒精品久久久一区二区| 久久久久婷婷| 七月婷婷综合| 又摸又舔在线观看网站| 3d成人精品一区二区| 久久成人精品| 久久极品一区二区| 欧美一级AAAAAAA| 国产精彩女在线观看视频| 中文字幕日本久久| 中日韓欧美高清| 精品97精品97| 成人免费福利在线观看| www欧美91| 日欧美色| 国产成人精品日本视频| 男人天堂资源| 秋霞午夜视频一区二区| a级理论午夜日本| 国产精品诱惑| 亚洲涩涩| 婷婷色导航| 无码137片内射在线影院| 啊啊啊啊啊啊啊网址在线观看| 中文字幕在线免费观看视频| 精品国产av一区二区三区四区入口| 亚热日本熟女| 九九热精品| 免费?级毛片无码?∨蜜芽试看| 天天日熟妇| 中文一区二区婷婷视频| 欧美亚洲| 欧美黄页| 熟女熟妇一区二区三区视频| 热久久91婷婷| 日韩欧美国产高清视频| 天天看天天日天天操| 伊人午夜福利视频| 日本免费一区二| 黄色性爱网网| 欧美黄色手机在线观看| 精品少妇人妻一区二区三区| 蜜桃久久久久久久| 99九九久久| 国产精品美女视频诱惑| 美国三级日本三级久久99| 色一射色一射| 柠檬AV导航| 国产网红精品| 天天草天天日| 草B在线| 青青草乱入乱欲视频在线观看| 这里只有精品视频| 激情啪啪拍91| 26uuu偷拍亚洲欧洲综合| 97 色综合| 久久有码视频| 91久久国外网| 91久久18禁| 99国产精品人妻人伦| 亚洲欧美国产日本一区二区三区| A级毛片在线看免费| 少妇一区二区三区| 啊啊啊水好多| 五月天AV资源| 久久久久久久久久久久九| 超碰色中文| 色一射色一射| 91N欧美| 久久九九99| 操屄不卡视频| 亚洲成人福利电影免费| 国产精品久久久久久久AV大片 | 精品无码久久久久久国产浪潮| 我要色综合网| 亚洲色宗合| 91n欧美| 欧美天天综合网版| 南澳成人一级片在线播放| 大干人妻| 午夜九九| 日韩成人人妻网站| 亚洲人妻久久久| 日韩毛片9| 婷婷五月天色网| 自拍第一页| 人妻少妇无码| 青青草原av| 天堂性色| 东京热双插| 日韩在线国产字幕| yaouchengrenav| 亚洲性爱电影| 天天躁日日躁xxxxx| 综合操逼| 1769精品一区二区三区| 日韩女模中文造逼| www.99视频| 亚州情色j区| 欧美香蕉视xxx| 精品999日本| 91n免费处女| 久久久无码精品人妻二区| 欧美性爱超碰97| 亚洲图片欧美色图| 国产狂喷潮在线精品|