色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

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

OpenSSL Engine 實(shí)戰(zhàn):密碼卡算法卸載與 P11/CSP 后端對(duì)接 簡(jiǎn)介圍繞 OpenSSL ENGINE 二次開(kāi)發(fā)整理的 C 工程模板面向需要在 Linux、Windows、macOS 上替換 OpenSSL 默認(rèn)對(duì)稱加密與 MD5 算法、接入 CSP 或 PKCS#11 的開(kāi)發(fā)者。模板給出 ENGINE 必須實(shí)現(xiàn)的接口與調(diào)用骨架使用者按注釋補(bǔ)齊密碼算法或硬件密碼服務(wù)邏輯即可把自定義實(shí)現(xiàn)掛接到 OpenSSL 中兼容 OpenSSL 1.0 與 0.9.8Windows 下可用 VC2005/VC2008 打開(kāi)解決方案Linux 下執(zhí)行 make 構(gòu)建。壓縮包共 19 個(gè)文件約 95KB包含 h/cpp 源碼、lib/def/exp 導(dǎo)入庫(kù)與符號(hào)定義、vcproj/sln 工程、Makefile 構(gòu)建腳本、rc 資源及 ReadMe 說(shuō)明結(jié)構(gòu)緊湊便于對(duì)照移植和二次開(kāi)發(fā)。已有 1154 人學(xué)習(xí)適合希望理解 ENGINE 框架、驗(yàn)證替換算法流程或?yàn)槊艽a設(shè)備做適配的中高級(jí) C 開(kāi)發(fā)者參考。1. 從一次握手卡殼說(shuō)起OpenSSL Engine 解決的是替換算法實(shí)現(xiàn)這件事前陣子幫一個(gè)做接入網(wǎng)關(guān)的朋友排查握手慢的問(wèn)題抓包發(fā)現(xiàn) RSA 私鑰運(yùn)算全壓在 CPU 上機(jī)器里明明插著一張密碼卡業(yè)務(wù)代碼卻完全不知道該往哪兒轉(zhuǎn)發(fā)。后來(lái)我們把這張卡包成一個(gè) OpenSSL Engine業(yè)務(wù)側(cè)一行代碼沒(méi)改只換了一份配置簽名就整個(gè)跑到卡上去了。這件事讓我對(duì)用 C 編譯 OpenSSL Engine、再搭一套 Engine 框架有了更實(shí)際的理解它真正的價(jià)值在于在 OpenSSL 內(nèi)部把算法實(shí)現(xiàn)的函數(shù)指針換掉不必從零寫(xiě)一個(gè)加密庫(kù)你想的是怎么把后端的 P11 會(huì)話、CSP 句柄塞進(jìn) OpenSSL 已有的調(diào)用鏈里。下面按我自己的落地順序講從一個(gè)能編譯、能加載的最小骨架開(kāi)始一路拆到 P11 與 CSP 兩條后端路線最后落到怎么改、怎么驗(yàn)證。2. Engine 的三層結(jié)構(gòu)與最小可編譯骨架2.1 ENGINE 對(duì)象里掛的是一張張函數(shù)指針表理解 Engine 最快的方式是把它看成一個(gè)算法實(shí)現(xiàn)的注冊(cè)中心。OpenSSL 內(nèi)部維護(hù)一個(gè)全局 ENGINE 鏈表每個(gè) ENGINE 結(jié)構(gòu)體里掛著若干張 method 表ENGINE_set_RSA對(duì)應(yīng)RSA_METHODENGINE_set_DSA對(duì)應(yīng)DSA_METHODENGINE_set_ECDSA對(duì)應(yīng)ECDSA_METHODENGINE_set_digests對(duì)應(yīng)一張EVP_MD數(shù)組ENGINE_set_ciphers對(duì)應(yīng)EVP_CIPHER數(shù)組ENGINE_set_pkey_meths對(duì)應(yīng)一張EVP_PKEY_METHOD表。這些表里全是函數(shù)指針OpenSSL 不關(guān)心你后端是密碼卡、是軟件實(shí)現(xiàn)還是別的庫(kù)只按簽名調(diào)用。調(diào)用鏈?zhǔn)沁@樣走的應(yīng)用層調(diào)用EVP_DigestInit_ex、EVP_PKEY_sign、RSA_private_encrypt時(shí)OpenSSL 先看當(dāng)前EVP_MD_CTX、EVP_PKEY_CTX或RSA對(duì)象上綁沒(méi)綁 Engine綁了就用 Engine 表里的函數(shù)指針沒(méi)綁就走默認(rèn)的軟件 method。所以 Engine 的粒度可以很細(xì)既能整體接管 RSA也能只接管 SM3 摘要剩下的繼續(xù)讓 OpenSSL 自己算。這帶來(lái)一個(gè)很實(shí)用的性質(zhì)Engine 可以只實(shí)現(xiàn)你最想卸載到硬件上的那一部分。我一般先只接管最耗 CPU 的私鑰運(yùn)算和國(guó)密摘要公鑰驗(yàn)簽、對(duì)稱加解密先留著不動(dòng)等壓測(cè)確認(rèn)瓶頸確實(shí)在那一塊再擴(kuò)。這樣改動(dòng)面小、回歸也短不至于一上來(lái)就把整條 TLS 鏈路掀翻。還有一層要分清Engine 本身是實(shí)現(xiàn)層的替換不負(fù)責(zé)策略。要不要用它、用哪個(gè)、哪些算法走它由ENGINE_set_default和配置文件決定。把這兩件事混在一起是后面很多加載成功但不生效的根源。2.2 目錄結(jié)構(gòu)與各文件職責(zé)我習(xí)慣把框架拆成引擎主體 算法適配 后端橋接 驗(yàn)證程序四塊目錄大致如下。這樣拆的好處是后面換后端P11 換 CSP或者換另一家卡只動(dòng) bridge 層bind_engine和算法表都不用碰。openssl-engine-demo/ ├── CMakeLists.txt ├── include/ │ └── demo_engine.h # 對(duì)外導(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 表摘要算法注冊(cè) │ ├── demo_pkey.cpp # EVP_PKEY_METHODPSS/ECDSA 這類需要 ctx 的算法 │ └── demo_p11_bridge.cpp # 后端橋接會(huì)話管理、句柄映射、機(jī)制轉(zhuǎn)換 ├── test/ │ ├── engine_smoke.c # 獨(dú)立于 openssl 命令行的冒煙程序 │ └── openssl-demo.cnf # 加載配置 └── build/ # 編譯輸出最終產(chǎn)物是 demo_p11.so幾個(gè)文件職責(zé)要?jiǎng)澢?。demo_engine.cpp只做注冊(cè)和生命周期管理不寫(xiě)任何算法邏輯demo_rsa.cpp、demo_digest.cpp只做OpenSSL 參數(shù) → 后端調(diào)用的翻譯不直接碰dlopendemo_p11_bridge.cpp才是唯一知道 P11 函數(shù)列表的地方。這條邊界守住了后端一旦出問(wèn)題排查范圍立刻收斂到一個(gè)文件。2.3 編譯命令與幾個(gè)容易踩的參數(shù)最小可用的編譯命令就是一行g(shù) -shared -fPIC但參數(shù)順序和頭文件路徑很講究尤其是機(jī)器上同時(shí)裝了系統(tǒng)自帶 OpenSSL 和你自己編的 OpenSSL 時(shí)。# 關(guān)鍵點(diǎn)-I 和 -L 必須指向同一個(gè) 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ù)含義逐條說(shuō)-fPIC -shared是動(dòng)態(tài)引擎的硬性要求產(chǎn)物必須能被dlopen-I和-L指向同一前綴否則會(huì)出現(xiàn)頭文件是 1.1.1、鏈接庫(kù)是 3.0 的錯(cuò)配癥狀是加載時(shí)符號(hào)找不到-ldl是給 bridge 層動(dòng)態(tài)加載 PKCS#11 模塊用的如果你的后端是編譯期靜態(tài)鏈接的可以去掉-Wl,-rpath把運(yùn)行時(shí)庫(kù)路徑寫(xiě)進(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這些符號(hào)直接不存在編譯就過(guò)不去。我一般先確認(rèn)目標(biāo)環(huán)境的 OpenSSL 配置openssl version -a看版本再翻include/openssl/opensslconf.h里有沒(méi)有OPENSSL_NO_DEPRECATED。如果已經(jīng)有 3.0 的強(qiáng)制要求那就得考慮走 provider 路線Engine 只能當(dāng)過(guò)渡方案。產(chǎn)物命名也有約定。OpenSSL 加載動(dòng)態(tài)引擎時(shí)默認(rèn)會(huì)在OPENSSL_ENGINES環(huán)境變量指向的目錄、以及編譯期寫(xiě)死的 engines 目錄里按引擎ID.so找文件所以產(chǎn)物名最好和ENGINE_set_id里的 id 保持一致比如 id 是demo_p11產(chǎn)物就叫demo_p11.so。名字對(duì)不上時(shí)ENGINE_by_id會(huì)返回空但報(bào)錯(cuò)信息非常含糊這個(gè)坑后面單獨(dú)說(shuō)。3. 核心代碼拆解從 bind_engine 到 RSA_METHOD 與 EVP_MD3.1 bind_engine 是整個(gè)框架唯一的加載入口動(dòng)態(tài)引擎被dlopen之后OpenSSL 會(huì)dlsym兩個(gè)符號(hào)bind_engine和v_check。前者是注冊(cè)回調(diào)后者是 ABI 版本協(xié)商。v_check返回 1 表示接受當(dāng)前 OpenSSL 的 ABI 版本返回 0 就直接放棄加載。這兩個(gè)函數(shù)必須用extern C導(dǎo)出C 編譯器默認(rèn)會(huì)做名字修飾導(dǎo)出的符號(hào)名會(huì)變成_Z11bind_engineP6enginePKcPKS2_這種dlsym按bind_engine找不到。/* demo_engine.cpp —— 框架注冊(cè)入口 */ 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 加載此時(shí)不做強(qiáng)校驗(yàn) * id 非空時(shí)必須和注冊(cè) id 一致防止配置寫(xiě)錯(cuò)卻靜默成功 */ 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 會(huì)被當(dāng)成加載失敗 */ } extern C int v_check(unsigned long v) { /* 0x10001 是 OpenSSL 1.0.1 起的 ABI 版本號(hào)低于它直接拒絕 */ return (v 0x10001UL) ? 1 : 0; }邏輯上這段代碼只做一件事把散落在各個(gè)文件里的 method 表收集起來(lái)掛到傳進(jìn)來(lái)的ENGINE *e上。任何一個(gè)ENGINE_set_*失敗都要立刻返回 0因?yàn)榘胱?cè)的狀態(tài)最麻煩看起來(lái)加載成功實(shí)際只有部分算法生效。參數(shù)說(shuō)明e是 OpenSSL 分配的 ENGINE 對(duì)象不要自己ENGINE_newid是配置里寫(xiě)的 engine_id可能為空l(shuí)ist是配置文件里default_algorithms之外的附加參數(shù)列表一般用不上。ENGINE_set_init_function注冊(cè)的回調(diào)只在第一次ENGINE_init時(shí)執(zhí)行適合放后端庫(kù)加載、全局會(huì)話池初始化這類只跑一次的動(dòng)作。3.2 把 RSA 私鑰運(yùn)算接到后端RSA_METHOD 的寫(xiě)法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ī)則處理、輸出簽名值返回值是簽名長(zhǎng)度。這里有個(gè)容易翻車(chē)的點(diǎn)返回值必須是實(shí)際輸出字節(jié)數(shù)返回 0 或負(fù)數(shù)會(huì)被 OpenSSL 當(dāng)成失敗而且上層報(bào)錯(cuò)信息完全看不出是你這邊的問(wèn)題。/* 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) { /* 后端會(huì)話掛在 RSA 對(duì)象的 ex_data 上索引在 init 階段申請(qǐng)一次 */ DEMO_SESSION *s (DEMO_SESSION *)RSA_get_ex_data(rsa, g_rsa_ex_idx); if (s NULL) { /* 沒(méi)綁定會(huì)話時(shí)回落到默認(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 明確失敗比靜默降級(jí)好排查得多 */ } 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í)長(zhǎng)度 */ }幾個(gè)參數(shù)再解釋一下flen/from是輸入數(shù)據(jù)加了RSA_PKCS1_PADDING時(shí)這里傳的已經(jīng)是 DigestInfo 結(jié)構(gòu)不要自己再拼一遍to是輸出緩沖區(qū)長(zhǎng)度至少RSA_size(rsa)padding決定機(jī)制映射PSS 這類帶參數(shù)的 padding 不適合在這個(gè)函數(shù)里做要轉(zhuǎn)到EVP_PKEY_METHOD的sign回調(diào)那里能拿到EVP_PKEY_CTX上的 PSS salt 長(zhǎng)度等參數(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)造會(huì)泄漏 */ } 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è)硬件不擅長(zhǎng)也沒(méi)必要 */ return meth; }RSA_meth_new的第二個(gè)參數(shù)是 flags一般傳 0。這里我特意不設(shè)pub_enc/pub_decOpenSSL 在沒(méi)設(shè)時(shí)會(huì)自動(dòng)回落到默認(rèn)實(shí)現(xiàn)公鑰運(yùn)算繼續(xù)走軟件省一次硬件往返。3.3 摘要算法用 EVP_MD 表注冊(cè)摘要這塊比 RSA 簡(jiǎn)單因?yàn)镋VP_MD的回調(diào)是固定的四個(gè)init、update、final、cleanup。上下文數(shù)據(jù)放在EVP_MD_CTX_md_data(ctx)返回的那塊內(nèi)存里EVP_MD_meth_set_*時(shí)不用自己管分配。/* demo_digest.cpp —— 以國(guó)密摘要為例注冊(cè)一張 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); /* 摘要輸出長(zhǎng)度 */ EVP_MD_meth_set_input_blocksize(md, 64); /* 分組長(zhǎng)度影響 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; } /* 注冊(cè)表以 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這個(gè)回調(diào)的調(diào)用約定值得單獨(dú)記一下OpenSSL 會(huì)先用md_table NULL調(diào)一次問(wèn)你支持幾個(gè)算法你填*nids再用nid NID_undef調(diào)一次讓你把EVP_MD*指針填進(jìn)數(shù)組最后按具體 nid 逐個(gè)查詢。三次調(diào)用的返回值含義不同寫(xiě)錯(cuò)的話癥狀是openssl engine -c列出來(lái)的算法列表缺項(xiàng)。result_size和input_blocksize必須和算法真實(shí)參數(shù)一致。填小了EVP_DigestFinal會(huì)截?cái)噍敵鎏畲罅藭?huì)多寫(xiě)內(nèi)存input_blocksize影響 OpenSSL 內(nèi)部的緩沖和EVP_MD_CTX_copy行為填錯(cuò)不一定立刻崩但在長(zhǎng)數(shù)據(jù)流上會(huì)出詭異結(jié)果。3.4 配置文件加載與第一次冒煙代碼編出來(lái)只是第一步能不能被 OpenSSL 認(rèn)出來(lái)要靠配置。最省事的方式是給一個(gè)獨(dú)立的 cnf用OPENSSL_CONF指過(guò)去不污染系統(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對(duì)上init 1表示加載后立刻ENGINE_initdefault_algorithms ALL表示把這個(gè)引擎設(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測(cè)的是ENGINE_init能不能成功-c列出這個(gè)引擎支持的算法。兩行都正常說(shuō)明注冊(cè)鏈路通了只有第一行沒(méi)有算法列表問(wèn)題在 method 注冊(cè)available變成unavailable問(wèn)題在init回調(diào)里的后端連接。4. 后端對(duì)接P11 與 CSP 兩條路線的落地差異4.1 PKCS#11 的會(huì)話模型與對(duì)象映射P11 是跨平臺(tái)的標(biāo)準(zhǔn)接口密碼卡、軟件模擬器、云上的密鑰服務(wù)基本都支持所以 Engine 框架對(duì)接的第一優(yōu)先級(jí)一般是它。核心概念就三個(gè)slot、session、object。C_Initialize之后C_GetSlotList拿槽位C_OpenSession開(kāi)會(huì)話C_Login登錄之后所有運(yùn)算都在會(huì)話里發(fā)起。對(duì)象映射是這里最需要想清楚的一層。P11 里的私鑰是CKO_PRIVATE_KEY類型的對(duì)象用C_FindObjects按CKA_ID或CKA_LABEL找出來(lái)拿到句柄OpenSSL 側(cè)的RSA對(duì)象只填n和e就夠d不填私鑰運(yùn)算全部轉(zhuǎn)發(fā)到句柄上。這樣私鑰永遠(yuǎn)不出硬件符合大多數(shù)合規(guī)場(chǎng)景的要求。會(huì)話的生命周期要單獨(dú)設(shè)計(jì)。我一般做成每個(gè)線程一個(gè)會(huì)話的池子ENGINE_init時(shí)建池ENGINE_finish時(shí)銷毀中間用CRYPTO_THREAD_lock保護(hù)。共享一個(gè)會(huì)話看著省資源實(shí)際在并發(fā)簽名時(shí)會(huì)被 P11 實(shí)現(xiàn)內(nèi)部的鎖串行化壓測(cè)直接掉到單核水平。機(jī)制轉(zhuǎn)換要建一張表把 OpenSSL 的 padding/算法組合映射成 P11 的CKM_*。RSA_PKCS1_PADDING對(duì)應(yīng)CKM_RSA_PKCSRSA_NO_PADDING對(duì)應(yīng)CKM_RSA_X_509PSS 對(duì)應(yīng)CKM_RSA_PKCS_PSS且要填CK_RSA_PKCS_PSS_PARAMSECDSA 對(duì)應(yīng)CKM_ECDSA且輸入必須是定長(zhǎng)的 r||s 而不是 DER。最后這條最容易翻車(chē)OpenSSL 期望 DER 編碼的簽名P11 吐的是裸 r||s中間得自己轉(zhuǎn)一次。4.2 CSP 的句柄包裝與算法標(biāo)識(shí)映射Windows 上的密碼設(shè)備大多還是走 CSP接口老是老但驅(qū)動(dòng)覆蓋確實(shí)廣。CSP 的模型和 P11 差別不小CryptAcquireContext拿HCRYPTPROVCryptGetUserKey或CryptImportKey拿HCRYPTKEY簽名走CryptSignHash而且它的哈希對(duì)象是獨(dú)立創(chuàng)建的CryptCreateHash→CryptHashData→CryptSignHash三步走。在 Engine 里包裝 CSP關(guān)鍵是別把HCRYPTKEY直接塞進(jìn)RSA對(duì)象的字段里。正確做法還是走 ex_dataRSA_set_ex_data(rsa, idx, wrapper)wrapper 里放 prov、key、以及一個(gè)引用計(jì)數(shù)。原因是RSA對(duì)象可能被RSA_dup或者跨線程復(fù)制裸句柄的釋放時(shí)機(jī)根本對(duì)不上最后不是泄漏就是重復(fù)釋放。算法標(biāo)識(shí)映射是另一張表。CALG_RSA_SIGN對(duì)應(yīng) PKCS#1 v1.5 簽名CALG_RSA_KEYX對(duì)應(yīng)加密CALG_SHA1、CALG_SHA_256對(duì)應(yīng)摘要。這里有個(gè)歷史包袱CSP 里摘要和簽名是綁在一起的CryptSignHash的dwFlags決定簽名時(shí)用什么哈希而 OpenSSL 的模型里摘要和簽名是分開(kāi)的兩步。對(duì)接時(shí)要么在EVP_PKEY_METHOD的 sign 回調(diào)里把已經(jīng)算好的 DigestInfo 原樣傳進(jìn)去用CALG_RSA_SIGN要么在 RSA_METHOD 層接受已經(jīng)帶 padding 的數(shù)據(jù)。選哪條取決于你的 CSP 驅(qū)動(dòng)對(duì) raw 簽名的支持程度有的驅(qū)動(dòng)只認(rèn)CryptSignHash那就只能走前者。4.3 什么時(shí)候選 P11什么時(shí)候繞不開(kāi) CSP判斷標(biāo)準(zhǔn)其實(shí)很樸素目標(biāo)平臺(tái)是不是只有 Windows以及設(shè)備廠商提供的驅(qū)動(dòng)形態(tài)??缙脚_(tái)、要接多家的卡、后續(xù)可能上云上的密鑰服務(wù)一律優(yōu)先 P11因?yàn)榻涌跇?biāo)準(zhǔn)、行為一致、調(diào)試工具也多。只有在 Windows 上對(duì)接的是純 CSP 驅(qū)動(dòng)、廠商明確不提供 P11 模塊時(shí)才單獨(dú)做一條 CSP 分支。我的做法是在 bridge 層抽一個(gè)demo_backend_ops結(jié)構(gòu)體里面全是函數(shù)指針open_session、close_session、sign、digest、find_key。P11 和 CSP 各實(shí)現(xiàn)一份demo_engine.cpp只依賴這個(gè)結(jié)構(gòu)體。這樣 Engine 主體和算法適配層完全不用改切換后端只是換一個(gè) ops 實(shí)現(xiàn)配置文件里加個(gè)BACKEND p11或BACKEND csp就行。成本上也要有預(yù)期。P11 路線前期要處理機(jī)制映射和簽名格式轉(zhuǎn)換大概兩三天能跑通CSP 路線因?yàn)楣?duì)象的模型差異往往要在EVP_PKEY_METHOD層多寫(xiě)一層適配時(shí)間差不多但調(diào)試更煩因?yàn)?Windows 上的錯(cuò)誤碼不像 P11 的CKR_*那么直觀。兩邊都做的話bridge 層的抽象一定要先定好否則后面就是兩份代碼互相抄。5. 避坑與排查Engine 加載不上、加載上又不生效的幾種典型5.1 先建立一條固定的定位順序Engine 出問(wèn)題時(shí)的報(bào)錯(cuò)信息普遍很含糊ENGINE_by_id返回空既不告訴你找不到文件也不告訴你符號(hào)沒(méi)導(dǎo)出。所以我一般按固定順序走一遍先確認(rèn)產(chǎn)物存在且架構(gòu)匹配file demo_p11.so再確認(rèn)OPENSSL_ENGINES或dynamic_path指對(duì)了接著用nm -D demo_p11.so | grep -E bind_engine|v_check看符號(hào)有沒(méi)有正確導(dǎo)出然后用LD_DEBUGlibs看dlopen到底加載了哪個(gè)路徑的庫(kù)最后才進(jìn) gdb 斷bind_engine看返回值。這條順序的價(jià)值在于把配置文件問(wèn)題符號(hào)導(dǎo)出問(wèn)題依賴庫(kù)問(wèn)題代碼邏輯問(wèn)題四類原因分開(kāi)不至于一上來(lái)就改代碼。5.2 五條踩過(guò)的坑現(xiàn)象一openssl engine demo_p11報(bào)cannot load engine但文件明明存在。原因通常是 OpenSSL 按引擎ID.so的規(guī)則去 engines 目錄找而你配的是dynamic_path卻寫(xiě)錯(cuò)了絕對(duì)路徑或者目錄權(quán)限不對(duì)導(dǎo)致dlopen失敗。解決是把dynamic_path寫(xiě)成絕對(duì)路徑并用ls -l確認(rèn)可讀同時(shí)用LD_DEBUGlibs openssl engine demo_p11 21 | grep demo看實(shí)際嘗試加載的路徑?,F(xiàn)象二openssl engine -t顯示 available但openssl speed -evp sm3還是軟件速度。原因是配置里沒(méi)寫(xiě)default_algorithms引擎只是被加載沒(méi)有被設(shè)成默認(rèn)實(shí)現(xiàn)。解決是在引擎配置段加default_algorithms ALL或者在代碼里ENGINE_init之后顯式調(diào)ENGINE_set_default(e, ENGINE_METHOD_ALL)。要注意ALL會(huì)把 RAND 也接管如果你的引擎沒(méi)實(shí)現(xiàn) RAND啟動(dòng)時(shí)可能直接失敗更穩(wěn)的寫(xiě)法是ENGINE_METHOD_ALL ~ENGINE_METHOD_RAND?,F(xiàn)象三ENGINE_init階段段錯(cuò)誤。我遇到過(guò)一次是demo_ctrl里解析MODULE_PATH時(shí)沒(méi)判p為空——OpenSSL 在查詢命令定義時(shí)也會(huì)調(diào) ctrl此時(shí)p是 NULL。解決是所有 ctrl 回調(diào)開(kāi)頭先按cmd分支只在真正設(shè)置參數(shù)的分支里解引用p并且ENGINE_CMD_BASE之后的命令號(hào)才做業(yè)務(wù)處理?,F(xiàn)象四單線程跑得好好的壓測(cè)時(shí)偶發(fā)簽名失敗。原因有兩個(gè)常見(jiàn)來(lái)源一是C_Initialize時(shí)沒(méi)傳CK_C_INITIALIZE_ARGS并置CKF_OS_LOCKING_OK多線程下 P11 模塊內(nèi)部沒(méi)加鎖二是 ex_data 索引在每個(gè)bind_engine調(diào)用里都RSA_get_ex_new_index一次索引值越用越大最后超出上限。解決是把C_Initialize的參數(shù)補(bǔ)全并且把 ex_data 索引申請(qǐng)放進(jìn)demo_init、用靜態(tài)變量緩存?,F(xiàn)象五換到 OpenSSL 3.0 環(huán)境后編譯報(bào)ENGINE_set_RSA未聲明。原因是那套 OpenSSL 用了no-deprecated編譯。解決有兩條路要么換一個(gè)保留 deprecated API 的 OpenSSL 構(gòu)建要么在編譯時(shí)定義OPENSSL_API_COMPAT0x10101000L把 deprecated 聲明放出來(lái)前提是庫(kù)本身編進(jìn)去了。長(zhǎng)遠(yuǎn)看還是得規(guī)劃往 provider 遷移Engine 在 3.x 上屬于能用但不建議新寫(xiě)的東西。5.3 一份可以照著走的排查清單把上面幾條壓成一張表出問(wèn)題時(shí)從上往下過(guò)一遍基本能定位到層。檢查項(xiàng)命令典型異常含義產(chǎn)物架構(gòu)file demo_p11.so架構(gòu)不匹配加載必失敗符號(hào)導(dǎo)出nm -D demo_p11.so | grep bind_engine沒(méi)加extern C名字被修飾依賴庫(kù)ldd demo_p11.solibcrypto指向了系統(tǒng)舊版本加載路徑LD_DEBUGlibs openssl engine demo_p11dynamic_path寫(xiě)錯(cuò)或權(quán)限不足注冊(cè)結(jié)果openssl engine -c demo_p11算法列表缺項(xiàng)method 沒(méi)掛上是否生效openssl speed -evp sm3速度沒(méi)變default_algorithms沒(méi)設(shè)這份清單我一般貼在項(xiàng)目 README 里新同事接手時(shí)少走很多彎路。6. 二次開(kāi)發(fā)換成自研算法后怎么改、怎么驗(yàn)真正需要改框架的場(chǎng)景通常是往里面加一個(gè)自研算法或者把某一段轉(zhuǎn)發(fā)邏輯換掉。以加一個(gè)自研摘要為例改動(dòng)面其實(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ù)里。如果這個(gè)算法沒(méi)有現(xiàn)成 NID用OBJ_create注冊(cè)一個(gè)自定義 OID或者直接用NID_undef加EVP_MD_meth_set_flags(md, EVP_MD_FLAG_DIGALGID_ABSENT)繞過(guò)參數(shù)編碼。別忘了在openssl.cnf的default_algorithms里確認(rèn)這個(gè)算法類型被包含否則還是老問(wèn)題——加載了但不生效。驗(yàn)證我堅(jiān)持三步走。第一步openssl engine -t -c看注冊(cè)第二步用openssl dgst -engine demo_p11 -sm3 somefile.bin和純軟件結(jié)果做cmp第三步寫(xiě)個(gè)獨(dú)立的小程序直接調(diào)EVP_DigestInit_ex并顯式綁引擎繞開(kāi)配置文件驗(yàn)證代碼路徑。第三步最有價(jià)值因?yàn)榕渲媚苎谏w很多問(wèn)題獨(dú)立程序里ENGINE_by_id返回空就是空沒(méi)有第二層兜底。對(duì)簽名類算法還要補(bǔ)一組邊界用例空數(shù)據(jù)、剛好一個(gè)分組長(zhǎng)度的數(shù)據(jù)、超過(guò) 64KB 的數(shù)據(jù)以及一個(gè)刻意構(gòu)造的錯(cuò)誤 padding看失敗路徑是否返回負(fù)值而不是 0。調(diào)試技巧上我最常用的是在bind_engine開(kāi)頭和每個(gè) 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)來(lái)的是什么值比自己猜映射表快得多。還有一個(gè)小習(xí)慣所有 P11 調(diào)用的返回值都用CKR_*名字打出來(lái)不要只打數(shù)字CKR_KEY_HANDLE_INVALID和CKR_MECHANISM_INVALID光看數(shù)字根本分不清。順帶說(shuō)一個(gè)容易被忽略的改造點(diǎn)ENGINE_set_default的粒度。整體接管用ENGINE_METHOD_ALL只接管特定算法用按位與組合比如只接管 RSA 和摘要就是ENGINE_METHOD_RSA | ENGINE_METHOD_DIGESTS。粒度選錯(cuò)的影響不是功能出錯(cuò)而是性能反而下降——把對(duì)稱加解密也轉(zhuǎn)到硬件上小包場(chǎng)景光往返開(kāi)銷就吃掉了收益。最后一條教訓(xùn)是我自己踩出來(lái)的。早些年改完 Engine 只跑了openssl engine -t就認(rèn)為完事結(jié)果上線后才發(fā)現(xiàn)某個(gè) TLS 套件走的 ECDSA 路徑根本沒(méi)接管全部悄悄回落到了軟件實(shí)現(xiàn)壓測(cè)數(shù)據(jù)和預(yù)期差了整整一個(gè)數(shù)量級(jí)。從那以后我每次改完 Engine都強(qiáng)制走一遍完整鏈路驗(yàn)證加載、算法列表、單算法對(duì)比、真實(shí)握手抓包看密鑰交換用的哪條路徑四步缺一不可。希望這些能幫到你少在那些報(bào)錯(cuò)含糊的地方耗時(shí)間。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本不卡免费二区| 国产天天噜一噜久久久| 青青草导航在线视频| 欧美亚洲丝袜人妻制服99| 久草视频制服诱惑| 青青草一区二区高清无码视频 | 91欧美经典| 欧美的性爱网站免费| 色综合99| 成人A片男人的天堂| 青草伊人网| 91超级碰碰| 易易A毛视频| 国产亚洲日韩欧| 性爱网站一区二区| 久久色AV线| 午夜福利在线合集| 青操影院| 亚洲av无码成人精品国产| 欧美色999| 亚洲一区中文字幕一区| 日韩精品亚洲一二三| 亚洲AV无线| 婷婷国产精品一区二区| 精彩久久中文| 九色 蝌蚪 熟女自| 操少妞在线视频| av午夜玫瑰| 色婷久久| 男人兔费天堂| 嗯嗯嗯好爽| 色噜噜国产精品视频一区二区| 97视频900| 26UUU欧美日本| 久久精品无码熟妇一区二区三区视频导航 | 久久久爆乳翘臀一线天伦理视频| 久9视频| 日韩在线一区高清在线| 日本中文字幕熟妇| 超碰97欧美日韩| 无码自拍SM| 色官网色综合| 97人人夜| 国产一级作爱毛片| 国产AV线| 超碰9 7女人| 加勒比久久av| 插B在线观看| 性爱AV天堂| 偷拍超碰| 精品999日本| 97在线观看免费视频l| 中文字幕 一区二区 亚洲无码| 日韩综合97p| 96精品久久久| 一本色道久久综合亚洲二区三区| 91N综合网在线| 九99久久| 9色国产精品一区粉嫩| 国产精品com| 波多野结衣之双飞调教在线播放 | 日韩免费簧片| 久久性生大片免费观看性| 男人的天堂 在线一区| 欧美色图亚洲色| 囯产精品久久久久久久久久二区三区 | 欧美巨大性舒爽顶到了| 精品人妻av在线播放| 中文一区在线视频| 国产精品久久久三级无码| 久久xx| 久超碰在| se,,,亚洲欧美| 欧美激情片一区二区| 97免费视频网| 208天天久久九九九| 懂色Av一区二区三区| 精精品人妻一区二区三区| 亚洲欧美第一页| 精品国产91av一区二区三区| 草b在线| 成人久久久精品| 四虎国产精品永久地址入口| 精品一啪| 久久久久一本一区二区青青蜜月| 美女骚尻视频| 久久久精品电影| 亚洲成人av电影在线| 九九热AV| 国产不卡中文字幕免费avi| 职场同事知名国产国产精品久久欧美日韩| 五月丁香黄色网| 亚洲成人一区二区精品| 人人模人人看| 成人在线日韩| 91少妇高潮| 国产探花日韩援交| 色丁香五月婷婷| 色综合九九| 操美女人妻| 色欲久久99精品久久| 水多多映视AV| 欧美日不卡| 91男同| 性色AV蜜色av色欲av| 亚洲AV噜噜狠狠网址蜜桃动漫| 日本 欧美 亚中文字幕| 99爱爱| 日本人妻最新在线中| 少妇天堂| 国产 v乱码一区二| 亚洲女优有码无码高清| 日韩一级特黄av毛片| 亚洲精品色| 日日做夜狠狠爱欧美黑人| 又大又大又大又粗爽高潮观看| 日韩免费看黄片| 亚洲色性情三级| 96精品久久久久久久久| www.婷婷| 超碰人人干天天射| 欧美激情 亚洲色图| 中文一区在线视频| 97视频620| 高清无码久操视频| av优播| 青青草久久一区网| 黄片qw| 熟妇高潮一区二区免费视频| 亚洲加勒比久久日本道| 五月天综合网| 综合夜夜| 久久精品亚洲东京热色播| 密臀在线视频| 超碰av人人人| 欧美激情激情xxxx欧美专区| 你操综合| 91搞逼视频| 国产熟妇一区二区| 午夜福利av电影在线| 91电影色诱| Sekablack无码一区| 久久爽爽精品| 亚欧日韩成人| 女人18精品一区二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久成年精品| 亚洲成a人在线观看久| 亚洲大胆人体av| 免费簧片在线观看| 情色图区| 精品一区96| 亚洲黄色视频在线观看视频| 亚洲精品蜜桃久久久久久久| 日韩中文字幕在线视频观看| 免费精品无码一级毛片牛牛影视 | 大伊香蕉在线视频免费| 青青草原av| 东京热免费视频| 亚洲综合九九| 日韩人妻精品中文字幕| 欧美丰满熟妇XXXX性ppX人交| 亚洲小说视频| 欧美日日人人天天| 黄页大片在线观看| 顶级丝袜熟女一区二区三区| 国语少妇精| 久久97资源 网| 黑人精品成人一区二区三区| 丁香五月av| 99av| 欧美,日韩,中文,另类| 人妻熟女一区在| 国产精品久久久久久无码红治院| 18精品一二区| 亚洲精品黑丝| 91殴美大片| 丁香九月激情啪| 国产色图乱伦| 97在线免费公开视频| 国产最新AV| 黄片无码在线制服| 国产亚洲性生活视频播放| 乱久久久| 亚洲天堂美臀在线| 麻豆天美国美国产| 欧美很很操视频| 日本潮催一卡操| 97精品视频在线播放| AND人妻系列| 久久久国产亚洲精品系列| 97资源站日韩| 啊啊啊啊好疼视频| 国产欧美后入| 国产精品国产自产拍高清AV| 99精品在线| 天天搞在线综合网| 日本视频在线中文字幕| 96久久久久久久| 另类av综合久久| 日韩欧美麻豆大片| 97天天搞在线| 色五月婷婷麻豆在| 无码逼| 日韩成人精品| 国产精品视频自拍在线| 91人人爽人人爽| 久久精品性| 青草青草久热| 色嗨嗨在线| 五十路六十路七十路熟婆| 日韩欧美加勒比| 少妇精品| 青青青在线高清视频在线一二三四区 | 高潮综合网| 97操97色| 欧美综合骚| 丁香五月综合| 久久精品视频久久久| 亚洲1区| 99热精品在线播放| 水野优香在线观看| 欧美少妇熟女| 污到发麻的视频 国产| 色五月av| sss视频华人在线| 亚洲精品久| 天天操av懂色| 人妻碰碰碰碰碰碰| 综合干干干av久久久综合网 | 久久人妻| 人人看黄色视频| 另类亚洲一区二区三区| 久久精品国产99精品亚洲蜜...| 久久久97| 人妻无一区二区三区| 欧美岛国精品在线观看| 色婷婷视频| 国产超碰| 美女尤物福利视频| 激情文学小说一区二区| 99婷婷一区二区| 国产精品视频在线观看| 性爱视频无打码在线观看| 伦激情人妻另类人妻| 成人精品久久久午夜福利| 欧美精品二区视频在线| 欧美日本中字另类在线| 亚洲天堂热| 日本在线一二| 日韩av乱伦| 防屏蔽在线视频| 91色综合激情| 97精品一区二区视频在线观看| 久久亚洲一区女同性恋中文字幕| 成年人黄色| 国产精品亚洲一级av第二区| 久久这里只精品99re66图| 五月婷婷影院| A啊啊在线观看| 超碰综合97在线| 啊啊啊好大好深| 久久久97| 啪啪91| 久艹伊人精品综合在线| 久草男人天堂| 蜜臀久久99精品久久久| 日韩在线观看字幕精品| 97se综合网| 97就爱干| 欧美成人一级麻豆| 一起草精品人妻| 96AV精品| 日韩欧美久久婷婷网站| 亚洲欧洲日本精品中文a∨| 两性色网| 久久精品视频在线观看| 中文字幕黄色一起草| 人妻另类 专区 欧美 制服| 人人射人人操人人摸| 深夜啪啪啪视频免费| 亚洲图片在线| 婷婷五月天小说| 久日91在线| 日韩一级二级三级在线不卡观看完整| 韩国三级理论在线| 久久国产精品,久久国产| 久久亚洲日韩熟女精品| 狠狠操夜夜| 96精品在线| 日日爽熟女| 另类TS人妖一区二区三区| 91久久久久免| 巨乳特殊服务按摩| 亚洲 日韩 欧美 国产综合体| 蜜桃狠狠色伊人亚洲综合 | 91久久99久久91熟女精品| 亚洲限制级| 啊啊啊啊啊啊啊啊在线观看| 大香蕉伊人久久| 加勒比av网| 九月激情婷婷| 97中文超碰| 亚洲精品第一| 五月丁香激情啪啪| av2014 日韩在线中文字幕| 91c色| 国精综合一二三区影视| 五月天久久综合网| 超碰碰激情97+久| 色欲久久久久综合网| 97视频在线免费看| 日韩无码视频黄色| 麻豆婷婷成人一二三| 国产在线观看一区二区三区| 97超碰碰碰| 美女被啪到深处抽搐视频| 射 色综合| 久久久久久九九九九| 丁香激情五月天| 国语少妇精| 丁香六月综合激情| 欧美性第一页| 亚州综合色| 操久久久久久| 伊人一区二区在线播放| 青青草成人视频在线观看二区| 亚洲成人黄色在线观看| 伊人久久大香线综合无码| 黄色操人| 天天色踪合| 国产欧美岛国精品一区| 任我爽在线视频免费观看| 国产精品国产拍高清AV| 色悠久| 久久久99久9| 国产第11页| 久操精品网| 亚洲男人的天堂V| 国产91亚洲精品一区二区三区| 69综合网| 成人欧美一区二区三区黑人一| 亚洲加勒比久久日本道| 2017超碰| 夜夜操天| 操逼逼福利视频| 欧美中文综合| 久久久久久久久9| 97操97色| 激情五月婷婷| 国产视频人人网| 人妻黑丝袜电影| 91|九色|国产熟女| 国产亚洲精品无码三区| 97在线播放 | 精品美女在线视频| 无码乱人伦中文视频| 亚洲无线观看久久| 色婷婷日韩精品一区二区三区| 天堂九九九九九九九九九| 亚洲欧美日韩二区视频| 男女啊啊啊| 亚洲欧洲第二视频在线观看色图| 人人妻人人爽人人精品| 精品久久久久久亚洲| 啪啪性爱免费视频| 日韩人人精品| 久操 高清| 五月婷婷综合网| 歐美性天天| 欧美日韩亚洲天堂| 久久视频,这里只有精品| 天天狠| 欧美老妇曰批的视频| 97中文字幕九区| 色九九九综合| 麻豆久久久久久久久丝袜 | 九九九综合精品| 国模精品一区二区三区苹果色戒| 成人精品一区二区91毛片不卡| 翔田千里AV无码秘 三区| 99色热| 91欧美巨乳| 天天α片| 亚洲 欧美 小说| 9/A片| 美女超碰978| 亚洲激情网| 色综合网1| 日韩性爱小视频在线观看| 91九色蝌蚪在线观看| 日本一二三免费久久| www. 男人天堂成人在线| 嗯嗯啊好大| 伊人久久亚洲中文字幕| 日韩人妻少妇中文字幕| 江都AV在线| 视频在线观看一二三区| 欧美老妇综合网| 67194无码不卡| 丰满欧美少妇| 任我爽视频在线观看| 男人的天堂.com| 精品大久久| 久啪视频| 欧美天天影院| 99re这里| 欧美亚洲色的图| 伊人欧美大香蕉视频| 九草九九九| 欧美第五页| 91欧美www| 国语少妇精| 日韩兔费看黄片| 欧美乱伦专区| 欧美一二三级精品在线| 无码在线亚洲| 亚殴在线| 91丝袜在线视频| 成人十八禁日韩欧美一二三| 国产精品丝袜在线| 精品无码一区二区三区| 美国人人操人人操| 翔田千里av一区二区三区| 激情五月天综合网| 一个人在线看的黄色电影网站| 人妻一区久久二区三区色播| 天天影视之亚洲综合网| 久久精品国产97欧美精品亚洲| 午夜九九九九九九| 人人操人人爽人人操人人| 欧美性生活免费网| 99综合免费视频| 亚洲综合网图| 日日干日日摸| 日本操逼视频不卡直接放| 久久6热视频免费观看| 色五月丁香五月| 欧美黑人与女人91~| 欧美色图人妻| 秋霞 色色| 成人免费福利在线观看| 宅男午夜在线视频| 乱操9999| 国产操伦| 色av中文字| 国产丝袜高跟美女av免费观看| 精品国产乱码久久久久久蜜臀| 欧美爆操91| 一本色道人妻久久| 一牛影视成人片免费| 可以免费观看的AV| 97精品97久久| 国产亚洲日韩在线三区黑人| 欧美亚洲性爱一区二区| 东京热AV男人的天堂| 欧美国产精品久久九九| 国产精品秘 福利姬在线观看| 丁香五月影院| 人妻天天爽夜夜爽2| 一级黄色性爱裸体视频| 日本人体九九九九九九| 久久人妻一区二区三区高清| 伊人专区一区二区三区| 色妹子A V| 少妇熟女视频一区二区三区| 国产综合在线视频网站| 97一区二区蜜臀| 97在线视频免费观看| 色五月综合| 97视频在线视频| 超碰无码加勒比| 91人妻视频在线| 啊啊啊久久| 婷婷91| 日韩精品资源| 天天天天天干夜夜夜夜夜操| 大屁股熟女一区二区三区| 中文字幕乱码人妻二区三区| 久草资源在线视频官方总站日韩丝袜美腿| 亚州一区二区| 欧美综合自拍成人自拍第二十页| 在线二区不卡| 欧亚洲精品有视频| 精品视频在线观看精品| 天天日B狠狠操| 69一区二区| 91色艳| 欧美中出| 男人干美女| 国产成人无码a| 午夜久久一区二区无码中出| 亚洲色综合| 人人操AV| 丁香婷婷久久| 国产乱伦性爱AV| 亚洲诱惑| 曰韩av中文字幕专区| 亚洲自拍青操视频| 免费看日产一区二区三区| 另类老少妇| 亚洲超碰AV| 啊啊啊不要啊啊受不了了视频在线| 2017天天拍大香蕉| 人妻插插人妻人| 久久av无码| 91青视频| 国模私拍一区二区三区神乳| 青草视频在线看看看看看看看看看| 欧美影音在线| 国产欧美一区激情交| 99蜜月精品久久| 免费中文在线| 精品国产乱码久久久久久久| 激情网五月天| 超碰在线一区| 色踪合AV| 激情四射婷婷四五月天| 欧美偷拍区| 视频在线97| 久久精品免费| 宅男影院久久久,99| 国产又粗又长的视频| 91狠| 再深点灬舒服灬太大了添视频| 亚洲影视第一页| 素人美腿视频网站| 久久无码电影| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 91狠狠综合久久| 国产高清成人免费视频| 日日日大屁股骚女人精品| 另类专区在线观看| 久久久啊啊啊| 天堂资源站| 婷婷久久综合久| 色色色日本| 亚州欧美总和| 五月婷婷激情综合| 亚洲男人天堂网| 97久久精品国产| 亚洲一区二区三区欧美日韩| 久久久91| 九一屌逼| 蜜桃无码AV一区二区| 中文字幕美女91| 91女优在线观看| 色婷婷在线视频精品导航| 久久这里是精品| 天天综合网在线91| 综合天天。| 91久热这里只有精品| AV和黑人在线播放| 日本一级真人黄色性爱视频| 国产白丝网站| 亚洲女人毛茸茸91| 夜夜操中文字幕| 欧美日韩淫加| 国产欧美美女免费观看视频| 夜夜爽77777| 亚洲国产一区二区三区四区国产| 色色色色日本| 多毛小伙内射老太婆| 国产精品不卡一区二区三区av | 亚洲欧洲中文日韩女优乱码| 国产精品电影大全| 干超碰碰熟女| 国产免费黄色一级大片| 极品色| 国产精品操| 亚洲乱妇p22| 99热在线播放| 亚洲?V高清一区二区三区尤物| 天天综合中文字幕 91| 久久久一区二区三区麻豆| 后入精品| 亚洲97精品| 无码天堂| 亚洲男人综合| 操逼片国产| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 试看日韩黄片| 97超碰色| 精品九九九| 国产97亚洲| 超碰97久久| AV一起草在线| 国产欧美日韩精品中文| 插欧洲美女欧美精品| 婷婷视频网| 欧美成人都市人妻| 91在线限制级| 亚洲高清内射| 欧美日韩中国x| 天天综合网~91| 欧美成人精品一区二区男人蜜臀 | 天天激清| 欧美日韩不卡a片| 人妻熟女av国产网站| 狠狠干狠狠色| 中国黑人三级片网站上区| 日本中文字幕一区| 一区二区三区高清| 国产乱伦性爱区| 睡产熟女乱伦| 91天天综合网,天天综合网| 操逼999| 97在线视频免费看| 99re热有精品视频国产| 国产动漫操逼视频| 麻豆影音天美视频| 啊啊啊 在线| 欧美一区二区男人天堂| 精品一区二区综合熟妇| 人人干人人操人人..com| 丁香五月天社区| 欧美91网站| 一区超碰一区| 性暴力欧美猛交在线直播| av资源在线观看少妇| 欧美性区| 啊啊啊啊好疼| 视频国产成人精品日本亚洲18| 黄色性爱网网| 磁力99AV| 91天天综合日韩欧美| 国产免费一区在线观看| AA特级绝黄| 中出在线视频| 中文字幕日韩电影人妻| 色色色热| 操老熟女AV| 久久这里只精品免费福利| 国产无马av| 大肉棒导航| 久久精品店| 日韩精品色呦呦| 午夜久久无码1000合集| 330Dv国产女人终合视频极品人与兽 | 日韩人妻大香蕉| 尤物视频偷拍免费| 国产综合在线视频网站| 97资源超碰| 中文字幕精品码亚洲| 日韩探花精品在线视频| 亚洲第一色页夜| 日韩欧无码一区二区三区免费不卡 | 思思热在线视频在线| 丁香五月社区| 国产91丝袜 在线播放| 国产精品呦一区二区三区| 五月天伊人| 亚洲欧美另类激情小说| 综合色图,成人综合网| 亚洲中文字幕av | 国产精品蜜乳AV| 青青草白白色| 国产亚洲欧美每日在线| 综合网欧| 欧美亚洲| 欧美手机在线综合| 92午夜免费福利视频| 亚洲男人的天堂AV| 国产女人和拘做爰视频 | 亚洲天堂一区二区久久| 日韩精品操少妇| 国内偷自视频区视频综合| 97色97好| 中文字幕交换人妻| julia ann久久| 色香阁在线| 国产精品网站免费| 人人操人人插人人摸人人干| 嗯嗯,啊啊,国产精品| 蜜臀99久久精品久久久懂爱| 性感女人网页在线观看视频| 国产亚洲精品一区二区三区| 国产精品视频| 日韩人妻免费精品| 欧美性第1页| 欧美一区二区三区入口| 亚洲自拍欧美色综合| 久久9 9 9精品| 5252色欧美在线| 91熟女丨老女人| 偷拍欧美综合| 校园春色综合| 天天欲望网| 日韩卡一卡二卡三在线| 亚州色图狠狠干| 国产人伦a片信息免费片| se,,,亚洲欧美| 一级啊性爱在线视频| 四虎在线视频| 91亚洲青青草原精品1区| 日本中文熟女视频| 久久久久久久久久黄色网| 夜间福利片1000无码| 久久婷婷一区| 啪啪视频mP4| 福利伊人玖玖国产| 不卡二三区人妻少妇| 99在线精品观看视频中文| 激情久久久| 天天操夜夜操| 亚洲性猛| 中文字幕丝袜美腿| 国产呦精品一区二区三区下载| 91久久国产精品| 91美女视屏| 国产精品盗摄 偷窥盗摄| 夜夜国自区| 97干在线看| 欧美中出1| 乱伦熟女论坛| 99久在线精品99re8蜜桃| 色噜噜人妻丝袜AV资源| 中文字幕 国产 精品| 蜜臀99久| 亚洲怡春院| 国精品一区二区三| 久久草大香蕉| 在线岛| 精人妻一区二区三区| 大香网伊人久久综合网eew| 精品久久99| 亚洲中文字幕在线视频一区二区| 另类专区加勒比| 综合网久久| av在线免费一区二区| 91综合站| 任你干在线视频| 男人的天堂在线有码| 天天做日日做| 91四海无码日韩欧美| 啊啊啊好大好湿| 吻戏激情性巴克| 色香色欲天天综合网天天来吧 | 日本免费一级AAA大片器| 久久久偷拍| 香蕉大久久久| 日韩精品9区| 婷婷另类小说| 超碰在线97国产| 日韩美脚一区二区网站| 日本熟妇一区二区三区| 大香蕉黄色一区| 亚洲色图亚洲无码强奸乱伦| 久久国产免费激情视频| 日本熟女不卡视频| 久久性爱视频免费看| 老熟女网站| 欧美资源| 小电影欧美91| 熟女精品一区二区在线观看| 蜜桃视频精品一区二区| 狼人久草| 玖玖色综合| 久热婷婷| 精品 码产区一区二-1080P高清在线www-B029AV | 91女人的网站| 暖暖精品二区三区观看| 1024久久高清视频| 大香蕉亚洲中文| 亚洲色图久久精品蜜| 色色色色色色色色色色色色色色综合| 91国产精品在线看| 久久极品一区二区| 伊人影院在线理论播放| 女人妻一区| 99久久综合| 天天摸天天舔天天操| 亚洲视频二区| 色亚洲欧美| 极品肉射| 欧美18 在线观看| 93人人操人人| 日韩av不卡在线观看| 国产情侣自拍在线播放| av日韩在线观看电影| 中文字幕一区二区三区视频播放| 丁香激情网| 九九九综合精品| 在线观看视频91| 国产热av| 91色交| 免费看黄视频亚洲网站| 日本日皮视频逼| 96一区二区三区| 97色在线视频| A 在线网址| 天天看,天天做| 天美麻豆精品视频99| 色婷婷婷五月天激情四射| 中字一区| 国内伊人久久久久久网站视频| 亚洲成aⅴ人片不卡无码| 强奸乱伦日韩AV| 1956日韩精品| 亚洲资源网| 精品人妻一区二区三区日产| 精品国产91av一区二区三区 | 国产av波波国产精品| 亚洲操逼网| 亚洲视频,小说| 免费男人的天堂| 日本韩国国产精品一区| 在线99热| 亚洲色入欧美| 久操精品| 亚洲AV无码久久久国产精品| 97久久久精品| 久久超碰日韩精品| 操我无码| 麻豆一区在线| 青青色在线观看| 国产精品久久久久久久AV大片 | 乱理日韩中文| 易易A毛视频| 国产亚洲中文不卡二区| 国产精品久久发布| 中文字幕乱妇免费视频| 日韩精品1区2区中文字幕| 91暧暧| 欧美性爱超碰97| 中字幕人妻一区二区三区| 六月丁香五月婷婷| 偷拍亚洲情色| 日本视频一区二区三区| 人妻一区久久二区三区色播| 女色视频社区| 日韩在线97| 久久精品区| 深夜激情无码| 四虎884a| 欧美真人抽搐一进一出gif| 国产激情综合五月久久| 久草老司机| 亚洲国产成人福利在线观看| 91女网站| 九九九九精品| 猛交交| 国产精品午夜福利| 日韩精品亚洲专区在线影视| 精品一国2| 国产资源中文字幕在线| 日韩欧美aⅴ综合网站发布| 开心六月色| 久久永久无码人妻视频| 亚洲综合在线视频| 国产久久天堂资源| 亚洲激情网一二三四区| 久久久不卡| 综合色图,成人综合网| 男人综合网| 久久久久久久人妻| 亚洲女人91| 吻戏激情性巴克| 亚洲国产熟妇综合色专区| 五月丁香综合网| 天美传媒AV在线播放| 国产超碰国产97| yw尤物av无码点击进入麻豆| 嫩草 人人网精品| 亚洲在线a| 99热亚洲天堂| 亚洲国产成人精品999| 精品视频久久| 日韩偷拍色图| 国产精品久久久久久高清无码免费看| 中文字幕乱码人妻一区二区三区,99精品 | 日本午夜精品理论片A级APP发布| 九九这里只有精品| 五月激情小说| 国产91福利小视频在线观看| 亚洲综合113页| 91精品久久久久五月天精品| 欧美 亚洲 综合 制服 另类| 亚洲视频1区| 日韩人妻精品| 国产精品交换一区二区| 很很操在线| 刺激精品视频| 久久受www免费人成| 国产精品久久久久999| 五月天精品| 中文字幕久久婷婷丁香五月天| 97精品一二区| 中国AV美女| 色九九九| 欧美日日操| 久久骚| 日韩啪啪啪啪啪| 中文字幕一区二区三区人妻不卡| 亚洲综合色婷婷| 久久在肏| http://qxhbdz.com| 啊啊啊啊啊在线| 日韩情色视频| 五十路六十路素人熟女| 午夜久久久| 美女黄频a美女大全免费皮| 亚洲情色综合网| 麻豆国产尤物AV| 久久国产免费激情视频| 后入国产| 性色av一区二区| 91色色色| 在线岛| 99无码| 国产欧美日产一区二区三区 - 国产欧美日| 蜜乳av一区二区| 日本一区二区三区四区五区六区七区八区九区| 好吊色一区| 色吧综合网| 91社操逼| 三男一女不戴套的A片| 偷拍亚洲视频一区二区三区四区| 亚欧美天堂在线| 成人性爱电影一区二区| 国产在线激情视频| 久久精品区| x97av| 污啪啪啪视频| 精品超碰国产| 激情五月综合开心五月| 97超碰中文在线| 久久久久久久久久久久久久久久9| 丁香六月激情| 亚洲图片欧美在线视频| 国产精品免费日韩| 噜噜噜在线视频| 亚洲性爱成人| 久久爱97| 久久久性少妇| 一区二区三区色综合| 精爱久久| 精…码一二三区| 色婷婷日韩精品一区二区三区| 五月婷婷丁香六月| 亚洲AV无码乱码在线观看性色| 亚洲欧美国产va在线播放频| 熟女熟妇一区二区三四区| 欧洲站一级二级三级h| ai欧美亚洲小说| 欧美 日韩 婷婷 五月| 日韩ab网 | 色色99| 亚洲激情在线| 九九久久综合| 97色碰| 婷婷丁香六月| 99热这里只有精品99| 99热99色| 成人短视频在线观看| 噜噜噜无码AV一级一级久久影院| 玖玖资源综合在线视频| 黄色片大香蕉| 无码少妇精品一区二区60岁老人| 久久精品国产亚洲AV嘿嘿| 国产无马视频| 日本精品高清一二区一本到| 激情久久久| 六月色色| 日韩素人无码一区二区三区三州| 白嫩嫩一区| 无码99| 久久鲁夜| 久久久9 9 9精品| 亚欧美综合网。| 国产熟码AV| 941超碰| 色臀AV| 懂色av一区二区三区天美传媒| 中文字幕乱亚洲美女精品一区| 精品欧美老熟女一二区| 天天射天天| 黄色小视频日本txt| 丰满人妻一区二区三区大胸懂色| 婷婷综合| 亚洲国产精品乱码在线观看| 欧美情色男人的天堂| 人妻少妇久久中文| 女生看匆91网站| 国产精品久久久久久亚洲色欲| 五月婷婷六月丁香网址| 中文字幕jul-617人妻熟女| 人人乐大香蕉| 亚州色国| 少妇贴图| 日韩簧片免费看| 国产AV高清AV无码| 欧美日韩情色一区二区| 北京美女一区二区| 午夜亚洲| 成人无遮挡毛片免费看| av绯色| 亚洲一区深夜| 国产亚洲日本| 亚洲国产97| 操高情无码| 国产精品久久久亚洲一区| 亚洲天堂第一页| 精品人妻一区二区三区四区| 级做a爱无码性色永久免费| 激情久久久| 色第一页| 亚洲成人ab| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 亚洲国产欧美另类自拍| 开心激情婷婷| 97热视频在线观看| 天天澡天天爽日日AV| 美国日韩黄色片| 欧美超碰9798| 亚洲欧美激情小说| 99久久久久久亚洲精品不卡| 五月天综合网| 大香蕉之青青草原| 亚洲第一页第二页激情| 综合久久婷婷| 男女香蕉一区二区| 91精品微拍福利| 天综合中文| 自拍亚洲综合| 好爽视频在线观看视频| 国产一区二区a毛片| 欧美日韩国产在线| 日本精品性生活久久久| 成人性交午夜免费片| 国产JDAV无码视频在线观看| 亚洲成熟国产精品美女| 老熟女91av| 91青青在线视频| 青青草原伊人网| 日韩亚洲精品一区二区| 欧美色图天堂在线| 97精品久久久久中文字幕| 久久香蕉国产线看观看亚洲女人| 欧美日韩色综合网| 人人综合| 欧美一二三| 超碰三级秋霞| 色九九九九九九| a级成人毛片免费视频高清| 亚洲中文人妻色| 夜夜嗨视频| 日韩欧美女优电影| 午夜男人的天堂| 婷婷久月| 久久有码视频| 久久久九九网站| 国产搭汕a级片| 99色婷婷| 麻豆AV一区二区天美传媒| 欧美黄片视频在线观看免费 | 黑人与人妻| 丰满人妻无码一区二区三区| 操b网站亚洲无码| 免费成人在线观看91| 天天日日本| AV在线性爱| 综合av影片| 欧美大香蕉专区网| 2020中文字幕在线| 日本在线不卡一二区| 欧美图片校园春色| 亚洲日韩一区电影| 久久专区| 男女激情中文字幕| 日本免费中文字幕在线| 操少妞在线视频| 91老熟妇| 精品九九九九九九九| 2021国产成人精品久久| 五月黑AⅤ| 欧洲综合色| 九九aV| 91中出在线| 五月天激情影院| 精品久久9| 久久男人精品| 9久精品视频在线观看| 国产极品粉嫩馒头一线天av| 欧美 亚洲 大香| 国产日韩精品suv| 久久久9视频| 国产家庭乱伦表演| 玖玖97综合| 被窝影院午夜看片无码| 97视频在线免费看| 91肉丝| 精爱久久| 欧美色视频在线| 大香久久| 大香蕉一人在线| 色情五月丁香| 国产色产精品在线观看 | 久久青青草原免费视频| 男人天堂无码| 久久精品人体| av绯色| 欧美天天综合网| 天天综合网AV91| 久久久久9999| 久操视频在线观看| 久久草视频污视频| 天天操夜夜操| 少妇xx精品| 免费国产视频| 国产精品一级二级在线| 激情五月天丁香社区| 日本精品一级二级三级| 另类图片五月天| 爱爱动态试试看6 0秒| 国产成人网| 99re国产精品视频| 东京热毛片177b2viP| 欲色啪| 九九九九九九九精品视频| 亚洲三区视频| 国产传媒日韩欧美| 国产自产91区13区| 亚洲成人无码影院| 秋霞Av理论一级在线| 公司1区2区3区精产精| 宗合情欲网| 国产日比| 一级黄色牲爱A级片| 天天看精品动漫视频一区| 欧美草草高清日韩视频| 久久久九九九九| 嗯嗯嗯啊啊啊操的我好爽| 久99视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲国产综合久久天堂| 五月丁香色色网| 福利在线黄片| 国产性爱在线视频一区二区| 又大又大又大又粗爽高潮观看| 国产后入式在线观看| 91日产欧美| 日少妇亚洲版| 嗯啊啊啊轻点视频 | 去干网最新版| 欧美性爱视频免费一区一A | 精品国产乱码久久久兰草影视| 一区二区三区精品视频| 国产婷婷综合在线观看| 欧美色图欧美| 丁香婷婷激情五月天无毒不卡| 大香蕉免费乱伦视频| 亚洲囯产精品女人久久久| 超碰九7| 色臀av| 国产v亚洲v日韩v欧美v片另类| 日韩精品-原创伙伴| 91岛国动作片| 久草新在线| 久久久涩|