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

ARTICLE DETAIL

資訊詳情

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

OpenSSL Engine 實(shí)戰(zhàn):密碼卡算法卸載與 P11/CSP 后端對接

OpenSSL Engine 實(shí)戰(zhàn):密碼卡算法卸載與 P11/CSP 后端對接 簡介圍繞 OpenSSL ENGINE 二次開發(fā)整理的 C 工程模板面向需要在 Linux、Windows、macOS 上替換 OpenSSL 默認(rèn)對稱加密與 MD5 算法、接入 CSP 或 PKCS#11 的開發(fā)者。模板給出 ENGINE 必須實(shí)現(xiàn)的接口與調(diào)用骨架使用者按注釋補(bǔ)齊密碼算法或硬件密碼服務(wù)邏輯即可把自定義實(shí)現(xiàn)掛接到 OpenSSL 中兼容 OpenSSL 1.0 與 0.9.8Windows 下可用 VC2005/VC2008 打開解決方案Linux 下執(zhí)行 make 構(gòu)建。壓縮包共 19 個文件約 95KB包含 h/cpp 源碼、lib/def/exp 導(dǎo)入庫與符號定義、vcproj/sln 工程、Makefile 構(gòu)建腳本、rc 資源及 ReadMe 說明結(jié)構(gòu)緊湊便于對照移植和二次開發(fā)。已有 1154 人學(xué)習(xí)適合希望理解 ENGINE 框架、驗(yàn)證替換算法流程或?yàn)槊艽a設(shè)備做適配的中高級 C 開發(fā)者參考。1. 從一次握手卡殼說起OpenSSL Engine 解決的是替換算法實(shí)現(xiàn)這件事前陣子幫一個做接入網(wǎng)關(guān)的朋友排查握手慢的問題抓包發(fā)現(xiàn) RSA 私鑰運(yùn)算全壓在 CPU 上機(jī)器里明明插著一張密碼卡業(yè)務(wù)代碼卻完全不知道該往哪兒轉(zhuǎn)發(fā)。后來我們把這張卡包成一個 OpenSSL Engine業(yè)務(wù)側(cè)一行代碼沒改只換了一份配置簽名就整個跑到卡上去了。這件事讓我對用 C 編譯 OpenSSL Engine、再搭一套 Engine 框架有了更實(shí)際的理解它真正的價(jià)值在于在 OpenSSL 內(nèi)部把算法實(shí)現(xiàn)的函數(shù)指針換掉不必從零寫一個加密庫你想的是怎么把后端的 P11 會話、CSP 句柄塞進(jìn) OpenSSL 已有的調(diào)用鏈里。下面按我自己的落地順序講從一個能編譯、能加載的最小骨架開始一路拆到 P11 與 CSP 兩條后端路線最后落到怎么改、怎么驗(yàn)證。2. Engine 的三層結(jié)構(gòu)與最小可編譯骨架2.1 ENGINE 對象里掛的是一張張函數(shù)指針表理解 Engine 最快的方式是把它看成一個算法實(shí)現(xiàn)的注冊中心。OpenSSL 內(nèi)部維護(hù)一個全局 ENGINE 鏈表每個 ENGINE 結(jié)構(gòu)體里掛著若干張 method 表ENGINE_set_RSA對應(yīng)RSA_METHODENGINE_set_DSA對應(yīng)DSA_METHODENGINE_set_ECDSA對應(yīng)ECDSA_METHODENGINE_set_digests對應(yīng)一張EVP_MD數(shù)組ENGINE_set_ciphers對應(yīng)EVP_CIPHER數(shù)組ENGINE_set_pkey_meths對應(yīng)一張EVP_PKEY_METHOD表。這些表里全是函數(shù)指針OpenSSL 不關(guān)心你后端是密碼卡、是軟件實(shí)現(xiàn)還是別的庫只按簽名調(diào)用。調(diào)用鏈?zhǔn)沁@樣走的應(yīng)用層調(diào)用EVP_DigestInit_ex、EVP_PKEY_sign、RSA_private_encrypt時OpenSSL 先看當(dāng)前EVP_MD_CTX、EVP_PKEY_CTX或RSA對象上綁沒綁 Engine綁了就用 Engine 表里的函數(shù)指針沒綁就走默認(rèn)的軟件 method。所以 Engine 的粒度可以很細(xì)既能整體接管 RSA也能只接管 SM3 摘要剩下的繼續(xù)讓 OpenSSL 自己算。這帶來一個很實(shí)用的性質(zhì)Engine 可以只實(shí)現(xiàn)你最想卸載到硬件上的那一部分。我一般先只接管最耗 CPU 的私鑰運(yùn)算和國密摘要公鑰驗(yàn)簽、對稱加解密先留著不動等壓測確認(rèn)瓶頸確實(shí)在那一塊再擴(kuò)。這樣改動面小、回歸也短不至于一上來就把整條 TLS 鏈路掀翻。還有一層要分清Engine 本身是實(shí)現(xiàn)層的替換不負(fù)責(zé)策略。要不要用它、用哪個、哪些算法走它由ENGINE_set_default和配置文件決定。把這兩件事混在一起是后面很多加載成功但不生效的根源。2.2 目錄結(jié)構(gòu)與各文件職責(zé)我習(xí)慣把框架拆成引擎主體 算法適配 后端橋接 驗(yàn)證程序四塊目錄大致如下。這樣拆的好處是后面換后端P11 換 CSP或者換另一家卡只動 bridge 層bind_engine和算法表都不用碰。openssl-engine-demo/ ├── CMakeLists.txt ├── include/ │ └── demo_engine.h # 對外導(dǎo)出的 bind_engine / v_check 聲明 ├── src/ │ ├── demo_engine.cpp # ENGINE 主體id、init/finish/ctrl、cmd 定義 │ ├── demo_rsa.cpp # RSA_METHOD 實(shí)現(xiàn)私鑰運(yùn)算轉(zhuǎn)發(fā) │ ├── demo_digest.cpp # EVP_MD 表摘要算法注冊 │ ├── demo_pkey.cpp # EVP_PKEY_METHODPSS/ECDSA 這類需要 ctx 的算法 │ └── demo_p11_bridge.cpp # 后端橋接會話管理、句柄映射、機(jī)制轉(zhuǎn)換 ├── test/ │ ├── engine_smoke.c # 獨(dú)立于 openssl 命令行的冒煙程序 │ └── openssl-demo.cnf # 加載配置 └── build/ # 編譯輸出最終產(chǎn)物是 demo_p11.so幾個文件職責(zé)要劃清。demo_engine.cpp只做注冊和生命周期管理不寫任何算法邏輯demo_rsa.cpp、demo_digest.cpp只做OpenSSL 參數(shù) → 后端調(diào)用的翻譯不直接碰dlopendemo_p11_bridge.cpp才是唯一知道 P11 函數(shù)列表的地方。這條邊界守住了后端一旦出問題排查范圍立刻收斂到一個文件。2.3 編譯命令與幾個容易踩的參數(shù)最小可用的編譯命令就是一行g(shù) -shared -fPIC但參數(shù)順序和頭文件路徑很講究尤其是機(jī)器上同時裝了系統(tǒng)自帶 OpenSSL 和你自己編的 OpenSSL 時。# 關(guān)鍵點(diǎn)-I 和 -L 必須指向同一個 OpenSSL 安裝前綴 g -stdc17 -O2 -g -fPIC -shared \ -I/usr/local/openssl/include \ src/demo_engine.cpp src/demo_rsa.cpp src/demo_digest.cpp \ src/demo_pkey.cpp src/demo_p11_bridge.cpp \ -L/usr/local/openssl/lib -lcrypto -ldl \ -Wl,-rpath,/usr/local/openssl/lib \ -o demo_p11.so參數(shù)含義逐條說-fPIC -shared是動態(tài)引擎的硬性要求產(chǎn)物必須能被dlopen-I和-L指向同一前綴否則會出現(xiàn)頭文件是 1.1.1、鏈接庫是 3.0 的錯配癥狀是加載時符號找不到-ldl是給 bridge 層動態(tài)加載 PKCS#11 模塊用的如果你的后端是編譯期靜態(tài)鏈接的可以去掉-Wl,-rpath把運(yùn)行時庫路徑寫進(jìn)產(chǎn)物省得后面還要設(shè)LD_LIBRARY_PATH。版本差異要提前想清楚。OpenSSL 1.1.1 里ENGINE_*系列是完整可用的主路徑文檔也齊3.0 起這套 API 被標(biāo)成 deprecated默認(rèn)編譯配置下還能用但如果你的 OpenSSL 是用no-deprecated編的ENGINE_set_RSA這些符號直接不存在編譯就過不去。我一般先確認(rèn)目標(biāo)環(huán)境的 OpenSSL 配置openssl version -a看版本再翻include/openssl/opensslconf.h里有沒有OPENSSL_NO_DEPRECATED。如果已經(jīng)有 3.0 的強(qiáng)制要求那就得考慮走 provider 路線Engine 只能當(dāng)過渡方案。產(chǎn)物命名也有約定。OpenSSL 加載動態(tài)引擎時默認(rèn)會在OPENSSL_ENGINES環(huán)境變量指向的目錄、以及編譯期寫死的 engines 目錄里按引擎ID.so找文件所以產(chǎn)物名最好和ENGINE_set_id里的 id 保持一致比如 id 是demo_p11產(chǎn)物就叫demo_p11.so。名字對不上時ENGINE_by_id會返回空但報(bào)錯信息非常含糊這個坑后面單獨(dú)說。3. 核心代碼拆解從 bind_engine 到 RSA_METHOD 與 EVP_MD3.1 bind_engine 是整個框架唯一的加載入口動態(tài)引擎被dlopen之后OpenSSL 會dlsym兩個符號bind_engine和v_check。前者是注冊回調(diào)后者是 ABI 版本協(xié)商。v_check返回 1 表示接受當(dāng)前 OpenSSL 的 ABI 版本返回 0 就直接放棄加載。這兩個函數(shù)必須用extern C導(dǎo)出C 編譯器默認(rèn)會做名字修飾導(dǎo)出的符號名會變成_Z11bind_engineP6enginePKcPKS2_這種dlsym按bind_engine找不到。/* demo_engine.cpp —— 框架注冊入口 */ static const char *DEMO_ENGINE_ID demo_p11; static const char *DEMO_ENGINE_NAME Demo PKCS#11 Engine; /* 生命周期回調(diào)前面先聲明實(shí)現(xiàn)在文件后半段 */ static int demo_init(ENGINE *e); static int demo_finish(ENGINE *e); static int demo_destroy(ENGINE *e); static int demo_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void)); extern C int bind_engine(ENGINE *e, const char *id, const char *const *list) { /* id 為空表示由 ENGINE_by_id 加載此時不做強(qiáng)校驗(yàn) * id 非空時必須和注冊 id 一致防止配置寫錯卻靜默成功 */ if (id ! NULL strcmp(id, DEMO_ENGINE_ID) ! 0) { return 0; } if (!ENGINE_set_id(e, DEMO_ENGINE_ID)) return 0; if (!ENGINE_set_name(e, DEMO_ENGINE_NAME)) return 0; if (!ENGINE_set_RSA(e, demo_rsa_method())) return 0; if (!ENGINE_set_pkey_meths(e, demo_pkey_meths)) return 0; if (!ENGINE_set_digests(e, demo_digest_table)) return 0; if (!ENGINE_set_init_function(e, demo_init)) return 0; if (!ENGINE_set_finish_function(e, demo_finish)) return 0; if (!ENGINE_set_destroy_function(e, demo_destroy)) return 0; if (!ENGINE_set_ctrl_function(e, demo_ctrl)) return 0; if (!ENGINE_set_cmd_defns(e, demo_cmd_defns)) return 0; return 1; /* 必須返回 1返回 0 會被當(dāng)成加載失敗 */ } extern C int v_check(unsigned long v) { /* 0x10001 是 OpenSSL 1.0.1 起的 ABI 版本號低于它直接拒絕 */ return (v 0x10001UL) ? 1 : 0; }邏輯上這段代碼只做一件事把散落在各個文件里的 method 表收集起來掛到傳進(jìn)來的ENGINE *e上。任何一個ENGINE_set_*失敗都要立刻返回 0因?yàn)榘胱缘臓顟B(tài)最麻煩看起來加載成功實(shí)際只有部分算法生效。參數(shù)說明e是 OpenSSL 分配的 ENGINE 對象不要自己ENGINE_newid是配置里寫的 engine_id可能為空list是配置文件里default_algorithms之外的附加參數(shù)列表一般用不上。ENGINE_set_init_function注冊的回調(diào)只在第一次ENGINE_init時執(zhí)行適合放后端庫加載、全局會話池初始化這類只跑一次的動作。3.2 把 RSA 私鑰運(yùn)算接到后端RSA_METHOD 的寫法RSA_METHOD是一張函數(shù)指針表最常被調(diào)用的是rsa_priv_enc、rsa_priv_dec、rsa_pub_enc、rsa_pub_dec。以簽名為例rsa_priv_enc的職責(zé)是接收待簽名數(shù)據(jù)、按 padding 規(guī)則處理、輸出簽名值返回值是簽名長度。這里有個容易翻車的點(diǎn)返回值必須是實(shí)際輸出字節(jié)數(shù)返回 0 或負(fù)數(shù)會被 OpenSSL 當(dāng)成失敗而且上層報(bào)錯信息完全看不出是你這邊的問題。/* demo_rsa.cpp —— 私鑰運(yùn)算轉(zhuǎn)發(fā) */ static int demo_rsa_priv_enc(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding) { /* 后端會話掛在 RSA 對象的 ex_data 上索引在 init 階段申請一次 */ DEMO_SESSION *s (DEMO_SESSION *)RSA_get_ex_data(rsa, g_rsa_ex_idx); if (s NULL) { /* 沒綁定會話時回落到默認(rèn)實(shí)現(xiàn)避免上層直接失敗 */ const RSA_METHOD *def RSA_PKCS1_OpenSSL(); return def-rsa_priv_enc(flen, from, to, rsa, padding); } CK_MECHANISM mech; switch (padding) { case RSA_PKCS1_PADDING: mech.mechanism CKM_RSA_PKCS; break; case RSA_NO_PADDING: mech.mechanism CKM_RSA_X_509; /* 底層模冪padding 由上層做 */ break; default: return -1; /* 未支持的 padding 明確失敗比靜默降級好排查得多 */ } mech.pParameter NULL; mech.ulParameterLen 0; CK_ULONG siglen (CK_ULONG)RSA_size(rsa); CK_RV rv s-funcs-C_SignInit(s-session, mech, s-priv_key); if (rv ! CKR_OK) { return -1; } rv s-funcs-C_Sign(s-session, (CK_BYTE_PTR)from, (CK_ULONG)flen, to, siglen); if (rv ! CKR_OK) { return -1; } return (int)siglen; /* 必須返回真實(shí)長度 */ }幾個參數(shù)再解釋一下flen/from是輸入數(shù)據(jù)加了RSA_PKCS1_PADDING時這里傳的已經(jīng)是 DigestInfo 結(jié)構(gòu)不要自己再拼一遍to是輸出緩沖區(qū)長度至少RSA_size(rsa)padding決定機(jī)制映射PSS 這類帶參數(shù)的 padding 不適合在這個函數(shù)里做要轉(zhuǎn)到EVP_PKEY_METHOD的sign回調(diào)那里能拿到EVP_PKEY_CTX上的 PSS salt 長度等參數(shù)。方法表本身用RSA_meth_new/RSA_meth_set_*構(gòu)造1.1.1 和 3.0 都能用static RSA_METHOD *demo_rsa_method(void) { static RSA_METHOD *meth NULL; if (meth ! NULL) { return meth; /* 進(jìn)程內(nèi)只構(gòu)造一次重復(fù)構(gòu)造會泄漏 */ } meth RSA_meth_new(Demo PKCS#11 RSA method, 0); if (meth NULL) return NULL; RSA_meth_set_priv_enc(meth, demo_rsa_priv_enc); RSA_meth_set_priv_dec(meth, demo_rsa_priv_dec); /* 公鑰運(yùn)算通常留在軟件側(cè)硬件不擅長也沒必要 */ return meth; }RSA_meth_new的第二個參數(shù)是 flags一般傳 0。這里我特意不設(shè)pub_enc/pub_decOpenSSL 在沒設(shè)時會自動回落到默認(rèn)實(shí)現(xiàn)公鑰運(yùn)算繼續(xù)走軟件省一次硬件往返。3.3 摘要算法用 EVP_MD 表注冊摘要這塊比 RSA 簡單因?yàn)镋VP_MD的回調(diào)是固定的四個init、update、final、cleanup。上下文數(shù)據(jù)放在EVP_MD_CTX_md_data(ctx)返回的那塊內(nèi)存里EVP_MD_meth_set_*時不用自己管分配。/* demo_digest.cpp —— 以國密摘要為例注冊一張 EVP_MD */ static EVP_MD *demo_make_digest(void) { EVP_MD *md EVP_MD_meth_new(NID_sm3, NID_undef); if (md NULL) return NULL; EVP_MD_meth_set_result_size(md, 32); /* 摘要輸出長度 */ EVP_MD_meth_set_input_blocksize(md, 64); /* 分組長度影響 EVP 層緩沖 */ EVP_MD_meth_set_flags(md, 0); EVP_MD_meth_set_init(md, demo_md_init); EVP_MD_meth_set_update(md, demo_md_update); EVP_MD_meth_set_final(md, demo_md_final); EVP_MD_meth_set_cleanup(md, demo_md_cleanup); EVP_MD_meth_set_copy(md, demo_md_copy); return md; } /* 注冊表以 NID 為索引最后一項(xiàng)用 NID_undef 結(jié)尾 */ static int demo_digest_table(ENGINE *e, const EVP_MD **md_table, int *nids, int nid) { static const int supported[] { NID_sm3, NID_undef }; if (md_table NULL) { *nids 1; return 1; } if (nid NID_undef) { md_table[0] demo_make_digest(); return 1; } return 0; }demo_digest_table這個回調(diào)的調(diào)用約定值得單獨(dú)記一下OpenSSL 會先用md_table NULL調(diào)一次問你支持幾個算法你填*nids再用nid NID_undef調(diào)一次讓你把EVP_MD*指針填進(jìn)數(shù)組最后按具體 nid 逐個查詢。三次調(diào)用的返回值含義不同寫錯的話癥狀是openssl engine -c列出來的算法列表缺項(xiàng)。result_size和input_blocksize必須和算法真實(shí)參數(shù)一致。填小了EVP_DigestFinal會截?cái)噍敵鎏畲罅藭鄬憙?nèi)存input_blocksize影響 OpenSSL 內(nèi)部的緩沖和EVP_MD_CTX_copy行為填錯不一定立刻崩但在長數(shù)據(jù)流上會出詭異結(jié)果。3.4 配置文件加載與第一次冒煙代碼編出來只是第一步能不能被 OpenSSL 認(rèn)出來要靠配置。最省事的方式是給一個獨(dú)立的 cnf用OPENSSL_CONF指過去不污染系統(tǒng)默認(rèn)配置。openssl_conf openssl_init [openssl_init] engines engine_section [engine_section] demo_p11 demo_p11_section [demo_p11_section] engine_id demo_p11 dynamic_path /usr/local/lib/engines-1.1/demo_p11.so MODULE_PATH /usr/lib64/libpkcs11.so SLOT_ID 0 init 1 default_algorithms ALLdynamic_path指向產(chǎn)物MODULE_PATH、SLOT_ID是自定義 ctrl 命令的參數(shù)由demo_ctrl解析名字隨便起但要和demo_cmd_defns對上init 1表示加載后立刻ENGINE_initdefault_algorithms ALL表示把這個引擎設(shè)成所有算法的默認(rèn)實(shí)現(xiàn)。這一行是加載成功但不生效的高發(fā)區(qū)后面單獨(dú)講。冒煙驗(yàn)證用官方命令行就夠export OPENSSL_CONF./test/openssl-demo.cnf openssl engine -t -c demo_p11 # 期望輸出類似 # (demo_p11) Demo PKCS#11 Engine # [RSA, SM3] # [ available ]-t測的是ENGINE_init能不能成功-c列出這個引擎支持的算法。兩行都正常說明注冊鏈路通了只有第一行沒有算法列表問題在 method 注冊available變成unavailable問題在init回調(diào)里的后端連接。4. 后端對接P11 與 CSP 兩條路線的落地差異4.1 PKCS#11 的會話模型與對象映射P11 是跨平臺的標(biāo)準(zhǔn)接口密碼卡、軟件模擬器、云上的密鑰服務(wù)基本都支持所以 Engine 框架對接的第一優(yōu)先級一般是它。核心概念就三個slot、session、object。C_Initialize之后C_GetSlotList拿槽位C_OpenSession開會話C_Login登錄之后所有運(yùn)算都在會話里發(fā)起。對象映射是這里最需要想清楚的一層。P11 里的私鑰是CKO_PRIVATE_KEY類型的對象用C_FindObjects按CKA_ID或CKA_LABEL找出來拿到句柄OpenSSL 側(cè)的RSA對象只填n和e就夠d不填私鑰運(yùn)算全部轉(zhuǎn)發(fā)到句柄上。這樣私鑰永遠(yuǎn)不出硬件符合大多數(shù)合規(guī)場景的要求。會話的生命周期要單獨(dú)設(shè)計(jì)。我一般做成每個線程一個會話的池子ENGINE_init時建池ENGINE_finish時銷毀中間用CRYPTO_THREAD_lock保護(hù)。共享一個會話看著省資源實(shí)際在并發(fā)簽名時會被 P11 實(shí)現(xiàn)內(nèi)部的鎖串行化壓測直接掉到單核水平。機(jī)制轉(zhuǎn)換要建一張表把 OpenSSL 的 padding/算法組合映射成 P11 的CKM_*。RSA_PKCS1_PADDING對應(yīng)CKM_RSA_PKCSRSA_NO_PADDING對應(yīng)CKM_RSA_X_509PSS 對應(yīng)CKM_RSA_PKCS_PSS且要填CK_RSA_PKCS_PSS_PARAMSECDSA 對應(yīng)CKM_ECDSA且輸入必須是定長的 r||s 而不是 DER。最后這條最容易翻車OpenSSL 期望 DER 編碼的簽名P11 吐的是裸 r||s中間得自己轉(zhuǎn)一次。4.2 CSP 的句柄包裝與算法標(biāo)識映射Windows 上的密碼設(shè)備大多還是走 CSP接口老是老但驅(qū)動覆蓋確實(shí)廣。CSP 的模型和 P11 差別不小CryptAcquireContext拿HCRYPTPROVCryptGetUserKey或CryptImportKey拿HCRYPTKEY簽名走CryptSignHash而且它的哈希對象是獨(dú)立創(chuàng)建的CryptCreateHash→CryptHashData→CryptSignHash三步走。在 Engine 里包裝 CSP關(guān)鍵是別把HCRYPTKEY直接塞進(jìn)RSA對象的字段里。正確做法還是走 ex_dataRSA_set_ex_data(rsa, idx, wrapper)wrapper 里放 prov、key、以及一個引用計(jì)數(shù)。原因是RSA對象可能被RSA_dup或者跨線程復(fù)制裸句柄的釋放時機(jī)根本對不上最后不是泄漏就是重復(fù)釋放。算法標(biāo)識映射是另一張表。CALG_RSA_SIGN對應(yīng) PKCS#1 v1.5 簽名CALG_RSA_KEYX對應(yīng)加密CALG_SHA1、CALG_SHA_256對應(yīng)摘要。這里有個歷史包袱CSP 里摘要和簽名是綁在一起的CryptSignHash的dwFlags決定簽名時用什么哈希而 OpenSSL 的模型里摘要和簽名是分開的兩步。對接時要么在EVP_PKEY_METHOD的 sign 回調(diào)里把已經(jīng)算好的 DigestInfo 原樣傳進(jìn)去用CALG_RSA_SIGN要么在 RSA_METHOD 層接受已經(jīng)帶 padding 的數(shù)據(jù)。選哪條取決于你的 CSP 驅(qū)動對 raw 簽名的支持程度有的驅(qū)動只認(rèn)CryptSignHash那就只能走前者。4.3 什么時候選 P11什么時候繞不開 CSP判斷標(biāo)準(zhǔn)其實(shí)很樸素目標(biāo)平臺是不是只有 Windows以及設(shè)備廠商提供的驅(qū)動形態(tài)??缙脚_、要接多家的卡、后續(xù)可能上云上的密鑰服務(wù)一律優(yōu)先 P11因?yàn)榻涌跇?biāo)準(zhǔn)、行為一致、調(diào)試工具也多。只有在 Windows 上對接的是純 CSP 驅(qū)動、廠商明確不提供 P11 模塊時才單獨(dú)做一條 CSP 分支。我的做法是在 bridge 層抽一個demo_backend_ops結(jié)構(gòu)體里面全是函數(shù)指針open_session、close_session、sign、digest、find_key。P11 和 CSP 各實(shí)現(xiàn)一份demo_engine.cpp只依賴這個結(jié)構(gòu)體。這樣 Engine 主體和算法適配層完全不用改切換后端只是換一個 ops 實(shí)現(xiàn)配置文件里加個BACKEND p11或BACKEND csp就行。成本上也要有預(yù)期。P11 路線前期要處理機(jī)制映射和簽名格式轉(zhuǎn)換大概兩三天能跑通CSP 路線因?yàn)楣ο蟮哪P筒町愅贓VP_PKEY_METHOD層多寫一層適配時間差不多但調(diào)試更煩因?yàn)?Windows 上的錯誤碼不像 P11 的CKR_*那么直觀。兩邊都做的話bridge 層的抽象一定要先定好否則后面就是兩份代碼互相抄。5. 避坑與排查Engine 加載不上、加載上又不生效的幾種典型5.1 先建立一條固定的定位順序Engine 出問題時的報(bào)錯信息普遍很含糊ENGINE_by_id返回空既不告訴你找不到文件也不告訴你符號沒導(dǎo)出。所以我一般按固定順序走一遍先確認(rèn)產(chǎn)物存在且架構(gòu)匹配file demo_p11.so再確認(rèn)OPENSSL_ENGINES或dynamic_path指對了接著用nm -D demo_p11.so | grep -E bind_engine|v_check看符號有沒有正確導(dǎo)出然后用LD_DEBUGlibs看dlopen到底加載了哪個路徑的庫最后才進(jìn) gdb 斷bind_engine看返回值。這條順序的價(jià)值在于把配置文件問題符號導(dǎo)出問題依賴庫問題代碼邏輯問題四類原因分開不至于一上來就改代碼。5.2 五條踩過的坑現(xiàn)象一openssl engine demo_p11報(bào)cannot load engine但文件明明存在。原因通常是 OpenSSL 按引擎ID.so的規(guī)則去 engines 目錄找而你配的是dynamic_path卻寫錯了絕對路徑或者目錄權(quán)限不對導(dǎo)致dlopen失敗。解決是把dynamic_path寫成絕對路徑并用ls -l確認(rèn)可讀同時用LD_DEBUGlibs openssl engine demo_p11 21 | grep demo看實(shí)際嘗試加載的路徑。現(xiàn)象二openssl engine -t顯示 available但openssl speed -evp sm3還是軟件速度。原因是配置里沒寫default_algorithms引擎只是被加載沒有被設(shè)成默認(rèn)實(shí)現(xiàn)。解決是在引擎配置段加default_algorithms ALL或者在代碼里ENGINE_init之后顯式調(diào)ENGINE_set_default(e, ENGINE_METHOD_ALL)。要注意ALL會把 RAND 也接管如果你的引擎沒實(shí)現(xiàn) RAND啟動時可能直接失敗更穩(wěn)的寫法是ENGINE_METHOD_ALL ~ENGINE_METHOD_RAND。現(xiàn)象三ENGINE_init階段段錯誤。我遇到過一次是demo_ctrl里解析MODULE_PATH時沒判p為空——OpenSSL 在查詢命令定義時也會調(diào) ctrl此時p是 NULL。解決是所有 ctrl 回調(diào)開頭先按cmd分支只在真正設(shè)置參數(shù)的分支里解引用p并且ENGINE_CMD_BASE之后的命令號才做業(yè)務(wù)處理?,F(xiàn)象四單線程跑得好好的壓測時偶發(fā)簽名失敗。原因有兩個常見來源一是C_Initialize時沒傳CK_C_INITIALIZE_ARGS并置CKF_OS_LOCKING_OK多線程下 P11 模塊內(nèi)部沒加鎖二是 ex_data 索引在每個bind_engine調(diào)用里都RSA_get_ex_new_index一次索引值越用越大最后超出上限。解決是把C_Initialize的參數(shù)補(bǔ)全并且把 ex_data 索引申請放進(jìn)demo_init、用靜態(tài)變量緩存?,F(xiàn)象五換到 OpenSSL 3.0 環(huán)境后編譯報(bào)ENGINE_set_RSA未聲明。原因是那套 OpenSSL 用了no-deprecated編譯。解決有兩條路要么換一個保留 deprecated API 的 OpenSSL 構(gòu)建要么在編譯時定義OPENSSL_API_COMPAT0x10101000L把 deprecated 聲明放出來前提是庫本身編進(jìn)去了。長遠(yuǎn)看還是得規(guī)劃往 provider 遷移Engine 在 3.x 上屬于能用但不建議新寫的東西。5.3 一份可以照著走的排查清單把上面幾條壓成一張表出問題時從上往下過一遍基本能定位到層。檢查項(xiàng)命令典型異常含義產(chǎn)物架構(gòu)file demo_p11.so架構(gòu)不匹配加載必失敗符號導(dǎo)出nm -D demo_p11.so | grep bind_engine沒加extern C名字被修飾依賴庫ldd demo_p11.solibcrypto指向了系統(tǒng)舊版本加載路徑LD_DEBUGlibs openssl engine demo_p11dynamic_path寫錯或權(quán)限不足注冊結(jié)果openssl engine -c demo_p11算法列表缺項(xiàng)method 沒掛上是否生效openssl speed -evp sm3速度沒變default_algorithms沒設(shè)這份清單我一般貼在項(xiàng)目 README 里新同事接手時少走很多彎路。6. 二次開發(fā)換成自研算法后怎么改、怎么驗(yàn)真正需要改框架的場景通常是往里面加一個自研算法或者把某一段轉(zhuǎn)發(fā)邏輯換掉。以加一個自研摘要為例改動面其實(shí)很固定在demo_digest.cpp里新增一組init/update/final/cleanup/copy回調(diào)用EVP_MD_meth_new構(gòu)造result_size和input_blocksize按算法真實(shí)參數(shù)填然后把 NID 加進(jìn)demo_digest_table的支持列表和nids計(jì)數(shù)里。如果這個算法沒有現(xiàn)成 NID用OBJ_create注冊一個自定義 OID或者直接用NID_undef加EVP_MD_meth_set_flags(md, EVP_MD_FLAG_DIGALGID_ABSENT)繞過參數(shù)編碼。別忘了在openssl.cnf的default_algorithms里確認(rèn)這個算法類型被包含否則還是老問題——加載了但不生效。驗(yàn)證我堅(jiān)持三步走。第一步openssl engine -t -c看注冊第二步用openssl dgst -engine demo_p11 -sm3 somefile.bin和純軟件結(jié)果做cmp第三步寫個獨(dú)立的小程序直接調(diào)EVP_DigestInit_ex并顯式綁引擎繞開配置文件驗(yàn)證代碼路徑。第三步最有價(jià)值因?yàn)榕渲媚苎谏w很多問題獨(dú)立程序里ENGINE_by_id返回空就是空沒有第二層兜底。對簽名類算法還要補(bǔ)一組邊界用例空數(shù)據(jù)、剛好一個分組長度的數(shù)據(jù)、超過 64KB 的數(shù)據(jù)以及一個刻意構(gòu)造的錯誤 padding看失敗路徑是否返回負(fù)值而不是 0。調(diào)試技巧上我最常用的是在bind_engine開頭和每個 method 回調(diào)里各打一行fprintf(stderr, ...)不要用printf因?yàn)?Engine 可能被加載進(jìn)守護(hù)進(jìn)程stdout 早被重定向了。配合gdb -p附著到openssl進(jìn)程在demo_rsa_priv_enc上下斷點(diǎn)能直接看到padding傳進(jìn)來的是什么值比自己猜映射表快得多。還有一個小習(xí)慣所有 P11 調(diào)用的返回值都用CKR_*名字打出來不要只打數(shù)字CKR_KEY_HANDLE_INVALID和CKR_MECHANISM_INVALID光看數(shù)字根本分不清。順帶說一個容易被忽略的改造點(diǎn)ENGINE_set_default的粒度。整體接管用ENGINE_METHOD_ALL只接管特定算法用按位與組合比如只接管 RSA 和摘要就是ENGINE_METHOD_RSA | ENGINE_METHOD_DIGESTS。粒度選錯的影響不是功能出錯而是性能反而下降——把對稱加解密也轉(zhuǎn)到硬件上小包場景光往返開銷就吃掉了收益。最后一條教訓(xùn)是我自己踩出來的。早些年改完 Engine 只跑了openssl engine -t就認(rèn)為完事結(jié)果上線后才發(fā)現(xiàn)某個 TLS 套件走的 ECDSA 路徑根本沒接管全部悄悄回落到了軟件實(shí)現(xiàn)壓測數(shù)據(jù)和預(yù)期差了整整一個數(shù)量級。從那以后我每次改完 Engine都強(qiáng)制走一遍完整鏈路驗(yàn)證加載、算法列表、單算法對比、真實(shí)握手抓包看密鑰交換用的哪條路徑四步缺一不可。希望這些能幫到你少在那些報(bào)錯含糊的地方耗時間。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
熟女日韩| 97色碰| 小骚逼被操的爽不爽| 国产欧美亚洲精品a第2页| 国产白丝av| 欧美成人一区二区| 天天综和| 激情四射五月天| 国产日韩区| 久久久久久人体| 久久久性爱视频| 91碰碰碰| 99自拍视频在线| 无码高清国产AV| 精品人妻一区二区三区在| 偷拍综合亚洲| 97色涩| 九九九九久久久| 午夜欧美女人操逼| 一级特黄aaa大片在线观看成人一级片在线观看 | 肏逼福利网站| 午夜毛片亚洲精品片国产久久久| 97一区二区三区视频| 欧美专利1区2区3区4区5区免费| 日本成人电影资源网| 青娱乐福利99| 成 人 A V免费视频在线观看| 人妻人久久精品中文字幕| 丰满精品人妻少妇久久字幕| 国产欧洲精品亚洲午夜拍精品| 久久綜合很很很| 黑丝91视频| 精品夜夜澡人妻无码| 色五月激情网| 亚洲 中文 女同| 日韩AV电影网站| 夜夜爽77777| 亚洲精品丝袜-不卡成人免费……| 日韩激情啪啪| 丁香五月性| HEYZO高无码国产精品227| 高清无码一区二区三区| 激情综合网五月婷婷五月天| 亚洲97久久精品亚洲| 天天懆天天日| 午夜理论片在线观看免费| 草草影院最新网址| 婷婷中文网| 性色av婷婷久久一区二区点复制| av天堂5| 好吊妞转入那个网| 中文字幕视频2区| 性感女人网页在线观看视频| 人妻出轨一区二区三区| 人妻在线臀日韩| 操我啊啊啊啊啊| 日本日日色视频| 久久人爽| 欧美专区17页| 三男一女不戴套的A片| 91精品亚洲内射孕妇| 久操操AV电影| 久久五月综合| 亚洲国产剧情少妇激情| AV99热18这里只有精品| 超碰97人人乐| 久久精品久| 爱妃国产亚洲视频中文字幕| 亚洲中文国际强奸字幕| 久久精品国产精品亚洲艾通辽熟妇 | 淫荡网址| 999亚洲国产视频| 国产精品久久久久综合| 日本男人插女人的逼黄色| 色97综合中文字幕| 天天做日日做| 男人天堂资源| 综合久久婷婷| 五十路熟女在线不卡观看一区二区| 欧亚 另类 久| 五月天成人综合| 中文字幕超碰CAO| 亚洲91网| 青青爽| 大逼色网站| 久久99午夜精品一区人妻| 东北女人| 国产 亚洲 丝袜 制服| 抽插爽| 日夜精品| 久九九九九九九热| 亚洲欧洲综合成人av一区| 啊啊啊好湿久久| 久久性爱视频99| 大香蕉中文aV在线| 强奸乱伦Av网| 最新制服中文第一页| 影音先锋视频在线| 丝袜视频网国产90| 免费观看欧美日韩操逼视频| JIZZJIZZ亚洲女人被躁| 乱色老一区二区三区的观看方式 | 亚州精人品大香蕉| 91久久堂| 国产成人bd在线观看| 干干干天天| 天海翼久久| 丝袜美腿欧美| 开心五月天激情网| 色丁香五月婷婷| 欧美大香蕉卡久久| 日韩欧视频| 好屌色综合| 久久久久大香青草精品综合| 久久人妻视频网| 午夜精品人妻二区三区| 97超碰色屌| 欧美日韩国产电影| 天天懆天天日| 91性高| 成人性交午夜免费片| 国产精品久久久久久久久AV大片| 天综合网欧美| 国产精选三级在线观看| 懂色av中文字幕| 久久精品国产亚洲AV嘿嘿| 久久色一区| 国产毛片毛片4p懂色| 人妻天天操天天爽视频免费| 日韩性爱啪啪视频| 情色五月天久久久| hd成人一区二区在线| 国产欧美日韩臀 | 超清福利精品视频在线| 99久久这里只有精品| 亚州高清av| 精品人妻中文字幕高清| 欧亚综合一卡二卡中文字幕| 无码WWW免费视频网站| 久久国产999| 大地资源在线观看中文第二页| 狠狠干2020| 日本色色色| 日韩成人私密一级精品av| 天美传媒AV国产在线| 综合欧美日本三级| 午夜男人av| 9丨久久九九九| 国产精品在线一区二区| 日本大香蕉| 九九色色| 亚洲精品三| 日韩一级二级三级免费看完整版| 91精品国产乱码| 婷婷在线视频| 国岛片视频| 久九色| 日韩精品99久久久久久中文字幕 | 操逼片国产| 欧美色网| 欧美成人一级麻豆| 秋霞怕怕片| 啊啊啊啊啊好多水| 综合 亚洲 欧美| 女同性恋中文字幕| 超碰一区二区| 久久只有精品| 97网色| 欧美,日韩,中文,另类| 97爱爱影院| 亚洲天堂中文字幕无码男同| 亚洲激情网一二三四区| 人妻啊啊人妻啊啊| 人妻精品4K4K4K4K4| 超碰国产在线| 骚货人妻偷情自拍在线视频| 99久re热视频精品98| 夜夜操青青草| 操逼逼无码| 影音先锋视频在线| 五月丁香综合啪啪| 人人天天欧洲| 裸体1区| 亚洲人久久久网| 岛国激情视频在线观看| 欧美精品久久久久久久丰满| 国产福利一区二| 国产在线观看一区二区三区| 日本色色色网站免费看不卡| 在线免费观看高清无码视频| 天美麻豆一区二区三区| 亚洲一区日韩精品中文字幕 | 国产一区二区三区高清视频| 啪啪视频亚洲第一| 亚洲有码 视频一区| 欧美最婬乱婬爆婬性视频| 一本正道久久熟女| 欧美成人贴图| 亚洲第一精品在线视频| 亚洲天堂综合AV| 久久久穴999| 尤物视频新赏网鲜网色诱网| 日本精品无码三级网站| 超碰在线974| 亚洲美女 晚间男人天堂| 91精品免费| 1024精品在线| 六月激情网| 午夜性生活av免费在线看| A片大香蕉在线| 99热自拍| 91熟女丨91老女人| 理论久久婷婷网 8| 日本媚薬中文字幕在线| www.91色| 色九久| 日欧亚洲二三区大片不卡| 99re这里只有精品中心播放| 欧美人妻熟女在线| 人人插人人摸人人| 成人在线永久| 五月天综合| 十八禁视频一区二区| 青青草在线成人视频| 88xx成人精品视频| 青青草玖玖爱| 五月综合视频| 国产精品对白内射| 免费成人在线观看91| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 97操97干| 麻豆黄色五月天| 久久精品国产精品一区| 啊啊啊啊好大好硬啊啊啊啊啊| a级理论午夜日本| 久久久999国产精品| 99热啪啪| www.亚洲成人一区| 日韩欧美~中文字| 丁香五月色情| 日韩精品一区二区高清| 亚洲第一男人天堂| 国产精品伦理| 91人妻超碰| 成人性爱AV在线免费观看| 成人A片男人的天堂| 操逼国产免费| 以及麻豆国产入口在线观看免费| 麻豆a'v电影| 青青草中文-久久青草精品一区二区三| 九九热三级片| 国产人人干| 天天综合精品| 蜜乳视频网站| 欧洲色综合| 亚洲美女 晚间男人天堂 | 人妻少妇被猛烈进入中| 久久久偷拍| 日本午夜福利视频| 97人人模人人爽人人| 人妻第一页| 黄网站黄视频网站进入口| 中文字幕在线观| 超碰 av 女人天堂| 情色av电影| 国产伦精品免编号公布| 97天天摸天天碰| 欧美一二在线| 殴美牲| 最新日产中文在线麻豆| 色色色欧美| 69少妇一区二区| 一区二区三| 日韩有码专区| 亚洲婷婷丁香在线| 久热一区二区| 免费网站观看www在线观| 久久久久亚洲Aⅴ无码| 另类亚洲一区二区三区| 欧美的性爱网站免费| 四虎精品一区二区| 久久精品操| 97超碰影音| 91白虎| 91精品国产一区三一| 黄页| 免费的黄片有限公司| 欧美亚洲国产91在线| 人人弄人人摸| 播播亚洲小说亚洲| 亚洲综合五月天| WWW黄片COM| 国产精品毛片?v一区二区三区| 91狠狠综合网| 91国产精品在线看| 大鸡巴久久久| 久久久久921| 日本三级精品| www.99色| www.狠狠操| 人人乐大香蕉| 超碰免费欧美7| 九九综合久久| 大香蕉92| 日韩免费中文字幕视频| 国内外色色色色色成人视频| 天堂麻豆天美| 久久久久久久97| 国产区91柔拿会所技师| 好吊妞转入那个网| 日韩毛片9| 欧美v亚洲v综合v国产v妖精| 天天做天天爱天天爽| caopeng97人妻| 欧美97se| 日韩激情中文字幕有码| 日韩一级久久毛片| 国产成人无码网站在线视频| 国产AV天美| 五月天伊人网| 日本激情免费大片| 老鸭窝黄色视频网站| 男人的天堂2019| 99色在线视频| 伊人午夜福利视频| 亚洲无码视频免费在线观看网址!| 亚洲国产av中文字幕久久| 欧美色综合影院| 久久久久久91香蕉国产| 色欲无码人妻日韩欧美精品| 黄色不卡视频| 国产自偷自拍一区| 制服丝袜第二页| 美女自卫慰黄网站免费| 97色欧洲| 一区二区三区日韩欧美| 性爱乱伦视频免费| 91熟女视频网| 亚洲人精品午夜不卡| 日本视频在线观看污污污| 久久婷婷在线观看视频| 一本久道在线综合视频| 中文字幕亚洲欧美在线不卡| 五月天久久综合网| 妇女乱色二区| 极品白嫩福利在线| 黄页视频网站野外| 超碰97久久| 久久日本熟女精品一区| 丁香六月激情综合| 久久av无码| 一区二区精品更新提醒| 国产一区二区三区视频在线看| 好好的日:com久久九九| 91狠| 五月丁香综合啪啪| 欧美日韩啪啪电影| 欧美狠狠干| 大香网站| 亚洲欧洲成人在线电影| 97资源站国产精品| 亚洲色图第四色| 九九九九久久久| 日本污ww视频网站| 成人精品在线| 黄片免费看黄片免费看| 97人妻免费中文字幕| 999精品久久久久久久| 加勒比综合九九99视频在线播放| 日韩人妻少妇 一区二区三区| 熟妇乱伦一区二区| 超碰色图| 麻豆天天躁天天揉揉AV| 日韩无码服务区| 天天色怡春院| 国产亚洲日本| 加勒比色综合| 欧美九一精品久久久熟妇| 69精品在线| 久操大香蕉| 欧美在线观看综合国产| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 静品嫩模一区二区| 久久亚洲婷婷| 日本91白丝| 小情侣高清国产在线视频| 久久久精品91八戒| 国产精品爽爽v| 欧美爆乳精品一区二区| 日韩在线一区高清在线| 中文字幕日韩人妻视频一区二区三区| 国产精品呦一区二区三区| 国产精品ⅴ无码大片在线看.| 一级毛片电影免费看| 国内毛片无遮挡国产| 好色综合| 综合免费无码中文| 国产玖玖| 4tube欧美女厕所| 日本性交操一区二区不卡系列| 99久久久er直播网址| 91热爆在线| 人妻精品视频一区二区三区| 色色色天美视频| 日韩欧美视频青青| 国产日本顶级一区二区三区| 九月丁香婷婷色| 大香蕉啪啪网| AV色女综合| 91精品人妻电影| 插老姨肥穴| 在线视频资源| 97伪v| 二三四区精品| 亚洲无码com| 亚洲精品a人片在线观看视| 欧美 日韩 亚洲 春色| 97人妻碰碰中文无码久热丝袜| 97色五月天完| 干超碰碰熟女| 91精品电影18| 91在线视频国产网站| 亚洲第一无码播放立川理惠| 伊人操操| 亚洲高清无毛一区二区| 精品无码少妇| 99综合| 国产蜜臀在线| 中文字幕在线24| 欧美亚洲韩国视频十五区| 亚乱色| 99re在线视频国产| 色五月首页| 日本精品一区二区三| 亚洲 欧美 手机在线观看| 亚洲成人帖图| 久久久久久久少妇| 370p日韩欧美亚洲精品| 黑人性暴力毛片| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 95精品在线| 亚洲精品国语在线播放| 夜夜嗷嗷一区二区| 九月丁香婷婷色| 激情啪啪视频| 中文字幕91综合| 搞中出久久| 国产热av| 伊人一区二区三区| 五月天综合| 精品人妻av在线播放| 久草电影网| 99re在线观看| 欧美,日韩综合久久| 久久久久久免费电影| www色婷婷| 欧美 亚洲精品首页| 久操热线| 欧美亚洲日本视频久久久| 免费精品无码一级毛片牛牛影视| 午夜爽爽爽| 午夜经典| 欧美人妻少妇| 操屄日韩| 草草影院最新网址| 日日操丁香五月天| 亚洲最大的综合性av| 亚瑟国产精品久久无码| 久久一区二区高清免费| 日本高清有码网址视频| 免费av在线播放二区| 日韩无码一级黄色av片| 蜜乳AV免费观看| 久久国产在线一区二区| 欧洲黄色网| 操逼操2| www.男人的天堂| 黄页av| 国产家庭乱伦表演| 亚洲av综合色| 五月天婷婷久久| 333kkkk·亚洲com久久| 亚洲aV性爱| 99热官网| 色噜噜人妻丝袜AV资源| 欧美日日人人天天| 天天躁日日躁狠狠躁| 欧美不卡在线一区二区| 国岛片视频| 99久久综合| 一区二区三区激情在线观看| 五月天色图影视| 丝袜狠狠草尤物人妻av91| 看黑人AV不卡| 俺去啦自拍| www.男人的天堂| 中文字幕,人妻,日韩| 日本国产高清色www视频在线| 首页中文字幕中文字幕免费| 精品妇女一区二区三区| 91欧美性| 日韩AV无码网站| 久久精品国产AV一区二区三区| 国产无码一二三区| 97蜜桃综合| 欧美色图99| 人人操人人操人人人操| 一二三四免费视频| 国产 大胆 对白| dy888午夜老子影视达达兔 | 在线看的av| 日本三级日本三级99| 天天爽爽爽爽| 精品国产91av一区二区三区| 玖玖爱综合网| 91人妻Pr| 琪琪精品免费一区二区三区 | 欧美日本一区二区a人| 性色高清..……| 91麻豆天美国产欧美日| 一区二区三区视频国产免费| 免费男人的天堂| 这里是精品| 久草免费在线一区二区| 国产综合色精品在线观看| 欧美亚洲厕所精品偷拍91| 九九av| www.色吧5.com| 日韩欧美麻豆| 麻豆激情综合| 久无码| 无码免费精品高清| 尤物视频一区| 熟妇一区二区| 久久久91福利姬| 日韩欧美成人大香蕉| 性爱av在线免费观看| 天天干天天操天天操夜夜操天天操 | 色爱综合网欧美| 97色碰| 欧美操逼熟女| 久久性生大片免费观看性| 999色欧美中文字幕| 试看福利| 色好看av| 天天干天天日天天射黄色大片 | 亚洲中亚日激情视频| 成年女人一区| 色色色色色色色色色色色色色色综合| 操逼片中文| AV天堂国产| 另类图片综合| 男人的天堂网页| 日日夜夜骑| 中文字幕av一区二区三区人妻少妇| 一区二区三区国产精产| 久久9精品视频| 久久久久久国产精品免费网站| 国产美女自拍AV| wwwxxx日本爽| 偷拍三区| 欧美性爱日韩性爱| 国产精品无码久久久久2025| 欧美午夜视频免费观看| 看日韩黄片| 思思热在线视频免费| 99热这里只有精品18| 97免费在线观看视频| 久久精品国产亚洲粉嫩| 丰满人妻-区二区三区| 97在线公开视频| 台湾佬大香蕉| 亚洲欧美黄| 成人羞羞视频国产| 久热影视| 亚洲制服aⅴ中文字幕| 色嗨嗨在线| 99热99在线播放激情| 色青青久久影视| 福利在线黄片| 亚洲高潮少妇| 青青草原人妻| 丁香婷婷激情五月天无毒不卡| 精品176精品2| 中文字幕免费看| 熟女熟妇一区二区三区视频| 欧美92| 清纯唯美第一页| 97爱爱| 日韩操逼HD| 天天干天天狼在线视频| 久久极品伊人| 97这里都是精品| AV色五月天| 国产精品伦理| 三级AV入口| 亚洲强奸乱伦影视网| 国语人妻精彩刺激| 亚洲性猛交| 密臀在线一区尤物| 秋霞成人一级在线观看| 欧美婷婷五月天| 日韩紧密久久| 爱丝福利| 亚洲无码国产探花在线观看| 国产精品无码av| 亚洲春色激情小说| 免费成人在线熟妇网| 四虎影视精品| 91精品国| 国产中文字幕在线点播| 色五月激情网| 老熟妇综合| 亚洲91在线| 又粗又长又爽在线观看| 亚洲欧洲视频小说在线观看| 97在线观看| 91呆哥人妻| 玖玖97综合| 欧美日韩中国x| 小说区 图片区色 综合区| 亚洲成?V人片在线观看福利| 亚洲中文字幕乱码无码一区二区| 91在线国产后入风骚翘臀美女素人| 欧美爱爱97| 亚洲av无码成人精品国产| 欧美老妇女内射网址| 青青操在线视频| 色哟哟511老熟女| 一区 欧美 日韩 麻豆| 躁躁躁日日躁2020| 欧美人人AAA| 2017大香蕉国产精品久久| 91精品导航| 亚洲综合精品国产一区| 一二三四视频在线社区中文字幕| 久操精品| 天美国产精品| 97在线观| 碰碰在线视频| 另类欧美色| 久久久97| 伊色久人大在线| aaaa少妇高潮大片| wuyechaopeng| 欧美成人四级在线播放| 18岁禁 茉莉成人久久| 97色欧洲| 激情深爱五月天| 青青青在线高清视频在线一二三四区| 成人性爱美曰韩| 操死我了嗯嗯嗯| 91福利网在线观看| 在线99热| 乱伦一二三| 粉嫩国产精品久久粉嫩| 人妻少妇精品久久久久久久| 日本久久精品| 91欧美网| 精彩视频日韩| 自拍偷拍亚洲熟女妇人精品 | 亚洲中文字幕在现观看| 丰满人妻一区二区三区在线| 五十路三区在线| 亚洲天堂色图| 琪琪精品免费一区二区三区 | 成人资源中文字幕在线观看| 久久男女激情视频网站| 久久久偷拍| 夜夜嗨AV一区天天| 91欧美情色| 99操碰| 日韩欧美日韩| 亚洲熟女一区| 婷婷中文网| 国产97色在线| 99re这里只有精品3| 成人a级高清视频在线观看| AV丝袜东京热| 香蕉久久国产AV一区二区| 亚洲色人| 人妻无码久久一区二区三区免费| 精品一区二区人妖| 国产日韩美女小穴视频网站不卡| 殴美,日韩国产伦精品| 强奸抽插av| 亚洲AV色图一区| 天天舔天天| 欧美爆乳精品一区二区| 破处bbq| 可以看的av| 一本色道久久天天射天天干| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 亚洲综合九| 蜜乳AV免费观看| 欧美色图片欧美色图| 天美av在线观看| 被男人添B超爽视频| 91综合天天| 午夜天堂精品久久| 丁香婷婷久久 | 人妻熟女午夜精品在线| 青青操网| 超碰美国| 日本精品一区二区三| 奸色色 男人天堂 天天射| 搡老人老9丨女老熟人| 亚洲熟女偷拍在线观看| 亚洲一区二区麻豆影院| 中国操逼无码| 久久久久久十| 免费网站观看www在线观| 婷婷五月综合在线| 亚洲暴力强奸AV| 9色国产精品一区粉嫩| 青青草华人在线欧美在线| 日韩精品熟妇| 五月婷婷色色| 亚洲一区二区三区四区视频| 天天欧美| 日本一卡二区在线| 香蕉色网| 97超碰色屌| 偷拍欧美激情| 丁香成人五月天| 一级黄色牲爱A级片| 欧美性爱第一区| 女人天堂av在线播放| 欧美色交| 呻吟 欧美 日本 中出| 日韩精品99久久久久久中文字幕| 欧美日韩性爱视屏免费看了| 国产不良强奸视频免费看| 97欧美| 成人情色综合网| 亚州大图综合色图 | 日韩无码黄色片| 亚洲国产91精品一区二区久久| 特色a在线上| 少妇熟女一区二区三区| 中文字幕黄色一起草| 中字一区| 5252色欧美在线男人的天堂| 免费超碰97久久| 久久噜| 很狠操| 俞拍自拍| 91中出在线| 天天搞欧美| 天天久久久久久| 久久久久国色αv免费观看| 欧美精品不卡一二三四在线91| 欧美人妻另类在线| 美女让帅哥通她小鸡鸡| 久久中文字幕女同性恋一区| 97国产天堂岛| 久久亚码| rivers-china.com| 超碰 欧美| 野狼福利社区| 精品久久久av无码免费| 99亚洲国产精品色一区二区三区| Sekablack无码一区| 中文字幕av亚洲精品| 被男人吃奶很爽的毛片| 东北丰满熟女国产一区| 乱欲一区二区| 色色色99| 色女女女导航| 伊人久久久日韩一区| 2019午夜福利视频| 精品国产乱码久久久久久久久久毛片 | 国产精品熟女一区二区三区| 国产精品一二三区18| 黄色视频60分钟| 日本精品不卡一二三区| 日本超碰在线国产一区| 蜜伊人色综合97| 久久久免费懂色| 亚洲综合色图欧美| av毛片aaaaa免费看| 欧美一级久久久久久久大片动画| 懂色AV蜜臀无码精品APP | 新亚洲无码| 国产精品熟女九色九色蜜臀| 国产一区二区视频在线播放| 五月激情综合网| 韩国女主播青草在线| 亚洲图片 欧美电影| 97超碰碰| 综合久久欧美| 久久久国产亚洲精品系列| 婷婷五月天激情小说| 操香逼| 欧日韩一二三f区| 国产探花日韩援交| 99热色精品| 麻豆久久久久久久久丝袜| 日韩干B| 亚洲 无码 偷拍| 高清在线偷拍自拍视频| 亚洲网自拍| 在线观看啊啊啊啊啊| 99天天超碰| 91在线色| 国产精品久久久亚洲第一牛牛_在线观看 | 国产农村妇女毛片精品久久| 亚洲天堂男人天堂网| 日韩亚洲精品一区二区| 欧美淫穴| 1204人成网站色www| 精品久久无码午夜福利| 精品久久久久久亚洲| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 91视频观看网站| 九九九久久久W精品| 国产成人在线观看网址| 久久草大香蕉| 午夜视频久久久| 免费一级精品啪啪视频| 久久色一区| 干超碰碰熟女| 激情视频网址| 成人开心网在线视频| 欧美 精品国产制服第一页| 啊啊啊操一区| 亚洲欧洲日韩中文字幕一区| xxx0国产在线播放| 神马午夜久久久| 上特色A在线| 静品嫩模一区二区| 成人久久久精品| 日韩激情小说一区二区| AV高清一区| 日韩精品在线放| 四季AV综合网址| 亚洲一区二区在线观看91| 中文字幕五区| 97天天日| 91校园春色长篇| 国产97在线视频| 国产超碰人人爽人人做| 超碰久在线天天做| h无码动漫在线观看| 97资源免费视频| 素人一区二区三区日韩| 牛牛久久国产精品视频一二三| 精品国产Av无码久久久亚洲| 欧美熟妇人体| 天天干天天燥| 91l欧美在线| 国产亚洲性生活视频播放| 欧美三级一级| 精品二区三四区五电影| 手机在线看片免费人成视频| 久9爱经典视频| 中文字幕在线观看视频www| 亚洲色欧| 亚洲日韩AV视色| 人妻色偷色噜| 美骚妇av高清在线| 国产探花精品在线| yazhououmeizongya| 亚洲免费看片| 东京热男人的天堂| 狼人综合婷婷激情四射 | 国产成人主播| 亚洲AV无码成人精品久久| 大香蕉日亚洲日本亚大 | 91美女在线视频| 激情接吻视频久久久久久| 97久久精品不卡| 亚洲 欧美 91| 亚洲国产精品久久AV| 欧美极品女人的天堂| a片自拍直播视频| 蜜臀av一区二区三区免费观看| 人妻天堂综合网| 亚欧高清| 99福利社| 东京太热久久久| 免费在线黄片视频| 酒色综合网| 九九九久久久久| 亚洲AV成人无码一区二区三区在线观看| 亚洲视频精选| 亚洲和欧美裸体美女双飞视频| 99热最新| ji熟女.com| 国产精品一区二区麻豆| 人人爽夜夜操| av网页一区二区三区| 九九九九亚洲| 人妻人人澡人人爽人人| 欧美日韩操逼嗦吊| 日本一级特级毛片视频| 黄站在线免费观看| 亚洲永久AV无码精品秋霞| 尤物一级在线免费观看| 狠狠久久手机视频精品| 中文字幕欧洲有码| 一个人在线看的黄色电影网站| 中国探花熟女| 久操com| 欧美 亚洲 第一页 | 岛国视频一二三区| 爱逼综合| 国产97/欧美| 97超碰色屌| 特污免视频| 午夜精品视频777| 男女猛烈无遮掩视频免费软件| 一卡二卡三卡| 色偷偷人人玩人人舔人人操人人摸人人爽 | 92人人操人人| 国产精品视频内谢女人| 亚洲人妻久久久| 青草香蕉网| 97人肏| 国产自偷自拍一区| 亚洲精品一区二区三区在线播放| 日韩免费av片高清无码| 久操频道免费在线呗看| 亚洲欧美在线综合| 一区二区视频你懂的| 久久99国产综合精品女同| 99操99| www.狠狠| 人人干人人搞人人摸| 国产人妖视频一区在线观看| 国产黄色小视频网站| 亚洲日韩电影| 超碰人妻久久| 狼人狠干| 欧美宗合色| 资源新线在线天堂| 亚洲国产97| rivers-china.com| 欧美高清在线| 国产精品对白自产拍| 亚洲无限观看| 亚洲欧美日韩国产丝袜自拍中文| 婷婷精品国产一区二区三区日韩| 99超碰色| 欧美丝袜激情| 日韩精品99久久久久久中文字幕| 国产日本熟女顶级一区二区三区视频 | 精品亚洲天堂| 亚洲激情在线| 日躁天天爽爽| 日韩性爱长视频免费| 天天躁日日躁狠狠狠躁| 青青青在线高清视频在线一二三四区| 风间由美日韩欧美久久| 干婷婷综合网| www.91久久| 性欧美另类高清| 青青草视频在线观看一区二区| julia在线观看久久| 日韩99神马视频片| 久久宗合亚洲| 大香蕉日亚洲日本亚大 | 色老大| 上特色A在线| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 亚洲天堂另类小说男人| 亚洲……91| 男人的天堂2018.| 加勒比海成人视频网| 男女香蕉一区二区| 国产精品另类一区大香蕉| 爱逼综合| 99在线免费公开视频| 综合久久六月久久婷婷| 丁香六月婷| 射欧美综合| 欧美日本不卡| 夜夜嗨视频| 福利操逼| 免费伦费视频在线观看| 98色网| 粉嫩AV输入| 欧美成人精品欧美一级乱黄一区二… | 艹比视频国产精品| 加勒比无码一区二区三区| 国产夫妻一区二区| 欧美淫乱视频| 超碰97人人cao| 免费啪啪一级视频| 久久婷婷国产一区二区色| 国产久久一区二区| 久久午夜神马| 激情抓乳插进去啪啪啪日韩 | 精品黑人一区二区| 丰满翘臀美女影院视频| 在线中文AV| 欧洲在线性爱视频| 欧美黄片视频在线观看免费 | 亚洲美女精品九九视频| 久久国产逼| 免费视频无码| 色哟哟精品1精品2| 亲子敌伦对白在线播放| 熟女六十路| 中 文字幕一区二区三四 五 区日 日 骚| 91美女视频。| 乱伦色图网址是多少| 国产后入精品| 欧美韩日精品99综合| 极品欧美一区二区三区| 亚洲欧美精品一区天堂久久| 亚洲人精品午夜不卡| 国产成年女黄特黄| 天天插天天射| 超碰社区97| 强奸乱伦Av网| 熟妇艹鸡八| 久久专区| 熟女性视频| 亚洲素人综合| 韩国午夜理伦三级好看| 青青草大香蕉在线视频| 偷拍综合网| 亚洲无码99| 精品二区久久| 韩国一级做A片免费的| 99精品热| 欧美亚洲素人制服精品| 蜜桃久久久久久久| 色色97爱| 亚洲偷拍自拍在线视频| 91无码人妻| 能在线播放的国产三级| 图色综合网| 日本中文字幕不卡视频| 国产精品91一样| 哑洲在线| 伊人久久综合精品欧美| 9久精品视频在线观看| 国产一区免费午夜视频| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 顶级丝袜熟女一区二区三区| 欧美日本天堂| 啊啊啊啊啊啊啊啊在线观看| 欧洲色色| 91成人无码| 高凊专区人人操| 欧美精品97| 射丝袜高跟鞋99| 中文字幕日韩专区精品系列| 激情五月天婷婷| 久久啊啊| 亚洲成人一二三区| 国产又色又粗又黄又爽| 亚洲成人精品久久久| 最新国内自拍av免费| 青青草国产盗摄一二三区| 亚洲AV噜噜狠狠网址蜜桃动漫| 久久超碰98| 99热这里只有精品地址| 国产一二三福利视频网| 久久怡红院| 人妻一区二区三区四区视频| 丝袜天堂| 成年人一级黄色毛片大全在线观看| 色香综合天天影视综合 | 精品网站99999| 91c色| 黑人性欧美| 夜夜爽77777| 人人看人人插| 九色 蝌蚪 熟女自| 一区二区三区四区色图| 国产精品ww久久| 吉川爱美亚洲二区在线| 怡红院一区二区熟女人妻| 94色色电影网| 9热9热综合网| 深夜激情无码| 欧美一级A一级a爱片久久| 麻豆黄四叶草网站| 91人妻尻屄视频| 91东北熟女| 长久操视频| 可以看的av| 久久青青草原免费视频| 日韩欧美中文字幕搭讪巨乳美人妻视频| 日韩成人色图| 欧美精品成人在线播放| 欧美综合色,www| 欧美少妇性乱| 美女尤物福利视频| 国产精品毛片?v一区二区三区| 欧美视频一区二区三区| 色哟哟-国产专区| 亚洲阿v天堂无码z2018| 中文字幕午夜精品久久久| juliaann精品熟女一区| ?亚洲伊人伊成久久人综合网| 天天综合-91入口| 99re综合伊人| 亚洲丝袜色图| 五月天婷婷综合| 欧美aa一级片| 屁股久久久久久| 大香蕉日韩欧美| 97精品视频免费| 9l视频自拍9l九色成人| 吖在线不卡一区二区国产剧情| 亚洲高清91| 嗯嗯啊啊日韩精品| 亚殴在线| 久久婷婷视频| 殴美在线AⅤ| 欧美亚洲素人制服精品| 国产精品在线免费| 福利在线视频一区二区| 亚洲麻豆精品二区三区| 爆操无码| AV网站高清无码在线观看| 97超碰人人模人人拍人人| 色97国产69香蕉| 极品后入免费视频| 久久国产精品,久久国产| 淫妻综合网| 欧美成人黄网色网站| 日韩精品碰碰| 老熟女乱伦一区| 蜜臀一区二区三区在线| 老熟女阿 国产91| 亚洲午夜蜜臀| 久久宗合亚洲| 青青三级视频| 精品久久久久瑟瑟| 大香蕉AV丝袜| 国产亚洲 中文欧美久久| 性爱视频久久| 91干熟女| 狠狠激情综合狠狠操中文字幕| 精品亚洲国产成人精品| 熟女乱伦A| 欧美激情视频在线一区| 操一操摸一摸| 翔田千里AV无码秘 三区| 国产一区二区三区精品观看啪| 91爱综合| 欧美.亚洲.另类.丝袜.制服.诱惑| 精品少妇一区二区三区在线视频| 天天草夜夜草高潮片| 日逼逼免费看| 2019天天干天天操| 黄色网址在线免费观看| 日韩成人在线性爱视频| 激情五月天插| 欧美另类精品xxxx| 色乱二区| 国产一级特黄大片处女| 欧美丰满少妇xx高潮| 岛国视频免费在线观看| 亚欧性爱ab|