国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成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 二次開發(fā)整理的 C 工程模板面向需要在 Linux、Windows、macOS 上替換 OpenSSL 默認(rèn)對(duì)稱加密與 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 個(gè)文件約 95KB包含 h/cpp 源碼、lib/def/exp 導(dǎo)入庫(kù)與符號(hào)定義、vcproj/sln 工程、Makefile 構(gòu)建腳本、rc 資源及 ReadMe 說(shuō)明結(jié)構(gòu)緊湊便于對(duì)照移植和二次開發(fā)。已有 1154 人學(xué)習(xí)適合希望理解 ENGINE 框架、驗(yàn)證替換算法流程或?yàn)槊艽a設(shè)備做適配的中高級(jí) C 開發(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è)一行代碼沒改只換了一份配置簽名就整個(gè)跑到卡上去了。這件事讓我對(duì)用 C 編譯 OpenSSL Engine、再搭一套 Engine 框架有了更實(shí)際的理解它真正的價(jià)值在于在 OpenSSL 內(nèi)部把算法實(shí)現(xiàn)的函數(shù)指針換掉不必從零寫一個(gè)加密庫(kù)你想的是怎么把后端的 P11 會(huì)話、CSP 句柄塞進(jìn) OpenSSL 已有的調(diào)用鏈里。下面按我自己的落地順序講從一個(gè)能編譯、能加載的最小骨架開始一路拆到 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ì)象上綁沒綁 Engine綁了就用 Engine 表里的函數(shù)指針沒綁就走默認(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è)和生命周期管理不寫任何算法邏輯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ù)路徑寫進(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里有沒有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)境變量指向的目錄、以及編譯期寫死的 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 一致防止配置寫錯(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是配置里寫的 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 的寫法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è)容易翻車的點(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) { /* 沒綁定會(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)也沒必要 */ return meth; }RSA_meth_new的第二個(gè)參數(shù)是 flags一般傳 0。這里我特意不設(shè)pub_enc/pub_decOpenSSL 在沒設(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)用的返回值含義不同寫錯(cuò)的話癥狀是openssl engine -c列出來(lái)的算法列表缺項(xiàng)。result_size和input_blocksize必須和算法真實(shí)參數(shù)一致。填小了EVP_DigestFinal會(huì)截?cái)噍敵鎏畲罅藭?huì)多寫內(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è)鏈路通了只有第一行沒有算法列表問(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開會(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。最后這條最容易翻車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 的模型里摘要和簽名是分開的兩步。對(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í)候繞不開 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層多寫一層適配時(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)沒導(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)有沒有正確導(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)題四類原因分開不至于一上來(lái)就改代碼。5.2 五條踩過(guò)的坑現(xiàn)象一openssl engine demo_p11報(bào)cannot load engine但文件明明存在。原因通常是 OpenSSL 按引擎ID.so的規(guī)則去 engines 目錄找而你配的是dynamic_path卻寫錯(cuò)了絕對(duì)路徑或者目錄權(quán)限不對(duì)導(dǎo)致dlopen失敗。解決是把dynamic_path寫成絕對(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還是軟件速度。原因是配置里沒寫default_algorithms引擎只是被加載沒有被設(shè)成默認(rèn)實(shí)現(xiàn)。解決是在引擎配置段加default_algorithms ALL或者在代碼里ENGINE_init之后顯式調(diào)ENGINE_set_default(e, ENGINE_METHOD_ALL)。要注意ALL會(huì)把 RAND 也接管如果你的引擎沒實(shí)現(xiàn) RAND啟動(dòng)時(shí)可能直接失敗更穩(wěn)的寫法是ENGINE_METHOD_ALL ~ENGINE_METHOD_RAND?,F(xiàn)象三ENGINE_init階段段錯(cuò)誤。我遇到過(guò)一次是demo_ctrl里解析MODULE_PATH時(shí)沒判p為空——OpenSSL 在查詢命令定義時(shí)也會(huì)調(diào) ctrl此時(shí)p是 NULL。解決是所有 ctrl 回調(diào)開頭先按cmd分支只在真正設(shè)置參數(shù)的分支里解引用p并且ENGINE_CMD_BASE之后的命令號(hào)才做業(yè)務(wù)處理?,F(xiàn)象四單線程跑得好好的壓測(cè)時(shí)偶發(fā)簽名失敗。原因有兩個(gè)常見來(lái)源一是C_Initialize時(shí)沒傳CK_C_INITIALIZE_ARGS并置CKF_OS_LOCKING_OK多線程下 P11 模塊內(nè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)變量緩存。現(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 上屬于能用但不建議新寫的東西。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沒加extern C名字被修飾依賴庫(kù)ldd demo_p11.solibcrypto指向了系統(tǒng)舊版本加載路徑LD_DEBUGlibs openssl engine demo_p11dynamic_path寫錯(cuò)或權(quán)限不足注冊(cè)結(jié)果openssl engine -c demo_p11算法列表缺項(xiàng)method 沒掛上是否生效openssl speed -evp sm3速度沒變default_algorithms沒設(shè)這份清單我一般貼在項(xiàng)目 README 里新同事接手時(shí)少走很多彎路。6. 二次開發(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è)算法沒有現(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第三步寫個(gè)獨(dú)立的小程序直接調(diào)EVP_DigestInit_ex并顯式綁引擎繞開配置文件驗(yàn)證代碼路徑。第三步最有價(jià)值因?yàn)榕渲媚苎谏w很多問(wèn)題獨(dú)立程序里ENGINE_by_id返回空就是空沒有第二層兜底。對(duì)簽名類算法還要補(bǔ)一組邊界用例空數(shù)據(jù)、剛好一個(gè)分組長(zhǎng)度的數(shù)據(jù)、超過(guò) 64KB 的數(shù)據(jù)以及一個(gè)刻意構(gòu)造的錯(cuò)誤 padding看失敗路徑是否返回負(fù)值而不是 0。調(diào)試技巧上我最常用的是在bind_engine開頭和每個(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)景光往返開銷就吃掉了收益。最后一條教訓(xùn)是我自己踩出來(lái)的。早些年改完 Engine 只跑了openssl engine -t就認(rèn)為完事結(jié)果上線后才發(fā)現(xiàn)某個(gè) TLS 套件走的 ECDSA 路徑根本沒接管全部悄悄回落到了軟件實(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
返回資訊列表
中文字幕乱碼在线| 久久久偷拍| 日韩人妻制服丝袜av| 99在线啪| 激情图片亚洲色图| 99操逼| 五月天亚洲色图| 性交一区二区在线播放| 国产黄a三级三级三级av在线看| 国产欧美在线观看免费观看| 久草毛片| 亚洲少妇激情视频| 嗯啊不要啊在线 | 蜜汁欧美| 啊啊啊不要啊啊受不了了视频在线| 一级啊性爱在线视频| 日本精品五区| 欧美综合天天| 97在线观| 成人资源中文字幕在线观看| 加勒比人妻综合| 91精品成人www| 日逼国产| 一本大道不卡一二三区| 综合伊人激情| 亚洲无无码αⅴ每日更新| 人妻丝袜一区二区三区在线| 97亚洲性爱| 天天激色| 欧美极品色| 97香蕉人人乳| 精品一区二区三区四区外站| 99日免费视频中文字幕| 大香蕉伊然在亚洲91| 久久曰曰| 91老熟女老女人国产老太| 超AV色女| 久久水蜜臀亚洲AV无码精品| 久久本道| 亚洲 另类 丝袜 自拍 动漫| 欧洲亚洲人人爽爽视频| 熟女熟妇一区二区三区视频| 欧美日韩美女精品久草一区二区三区| 精品一久久久| 日韩图区| 桑老女人九区| 欧美综合色,www| 国产精品日日摸天天碰| 欲综合网| 最新AV在线| 91美女视频直播| 毛片麻豆91糖心精品毛情片| 熟女露脸激情自拍视频| 日日爽熟女| 97在线免费公开视频| 在线电影亚洲色图| 欧美色图综合网| 久久久久久久| 可以免费看黄片的视频| 亚洲AV无码黄色强奸| 国产女乱淫真高清免费视频| 婷婷综合网| 夜夜操二区| 一个人在线看的黄色电影网站| 6080yy午夜理论三级一区二区三区无码| 五月婷婷基地| 极品粉嫩少妇视频| 欧美九一精品久久久熟妇| 免费超碰97久久| 国产吹潮女在线观看| 欧美日韩亚洲国产中文永久天天看| 91国精产品| 91精品人妻一品二品三品| 欧美高清色| 奇米四色网| 女人喷水视频在线观看| 99热在线观看| 久久久∴| 中文字幕亚洲永久精品| 大鸡巴久久久| 久久久久久亚洲精品中文字幕人妻| 久久久久久大| 九九九九九九免费视频| 欧美日韩1234| 欧美性爱五月天| 麻豆区99999| 久久久国产精品亚洲精品| 欧美97av| 国产成人精品日本视频| 91夜夜蜜桃臀1区2区3区| 秋霞一区二区三区四区五区六区七区| 日韩中文字幕精品一二三事国产精品| a级免费在线观看| 中国AV美女| 丁香九月激情| 学生妹天天看| 黄色激情电影在线观看| 精品国产一区二区三区av在线资源| 色999偷自拍拍| 天天干1区2区在线| 久久无码一区二区二三区性色| 欧美黄片欧美黄片xxx| 欧美极品少妇交| 国产女生在线| 天美传媒国产原创中文字幕亚洲欧美另类 | 国内91熟女人妻丝袜天天精品视频在线 | 亚洲色图欧美色18直播在线| 亚洲成人性爱网站在线播放| 天天干美少妇一区| 校园春色第一页| 懂色天天爱天天日天天射天天澡| 99自拍B亚洲| 久久久涩| 久操视频免费观看| 男人的天堂三级| A一级色女| 伊人综合色网| 午夜黄色免费在线观看| 久久精品人妻一区二区| 国产强奸乱伦欧美| 国产青一二三| 啪啪资源网| 好湿好紧视频| 精品人妻一二三四区视频| 久久春色| 久久久一区二区三区麻豆| 国产女人与拘做受视频免费| 男人综合网| 欧美女同在线| 色姑娘综合网| 久久久久久久国产视频| 91欧美性| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 摸奶性爱视频网站在线免费播放| 亚洲综合69| 日韩人妻一二三区视频| 美国一区二区免费视频| 久久国内| 淫乱图区| 美腿色图| 久久久国产亚洲精品系列| 操亚州| 亚洲精品国产精品乱码不卡| 天操老女人| 国产午夜福利专区综合| 99热综合| 伊人操你| 蜜桃无码AV一区二区| 国产无码精品高清| 一区二区首页| 男女性扦B| 91女在线观看| 熟女中出视频| 亚洲天堂AV在线播放| 无码一区免费在线不卡| 九月丁香婷婷| 国内精品久久人妻性色av| 国产精品对白内射| 日韩无码a片| 亚洲久草AV色图| 99热综合在线| 亚洲色欲天天人妻无码系列专区| 女同性恋一区二区三区精品视频| 色噜噜综合在线| 97精品久久| 国产欧美美女免费观看视频| 91精品亚洲内射孕妇| 中文字幕色AV| 97在线视频网站| 少妇国产不卡| 5月婷婷6月六月丁香| 亚洲欧洲日韩中文字幕一区| 久久久久久性爱片| 欧美午夜一区二区三区| 九热中文字幕| 男人的天堂无码| 少妇二级| 国产激情片在线观看| 亚洲熟女av中文字幕| 成人A片男人的天堂| blacked精品一区国产| 欧美se综合| 日日做夜狠狠爱欧美黑人| 欧美一区二区亚洲天堂| 高跟丝袜AV专区国产| 超碰成人人人爽人人爽| 岛国天天午夜影院传媒网| 久久精品亚洲婷婷| 秋霞视频一区二区 | 99色视频| 日本一级二级三级网站| 成人一道本免费视频| 黄页网站成人免费| 97一区二区三区视频| 操人妻少妇中文| 看日韩操逼| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 久久久com| av天堂天堂av日韩| 91伊人久| 超碰成人国产| BBBBB97COM| 好看的91视频| 柠檬AV导航| 婷婷五月天小说| 久久综合久久综合人久久夜精品| 噜噜噜噜久久久精品免费| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 色五月第四色| 欧美日韩情色一区二区| 99re视频在线观看这里只有精品| ?亚洲伊人伊成久久人综合网| 国产野战露脸在线播放| 欧美一区二区福利在线| 国产精品伦理| 亚洲欧美国产中文字幕| 久久日本熟女精品一区| 情色五月天网| 欧美激情一| 亚洲91网站| 久久久久密臀一区二区| 亚洲伊人久久精品影院| 精品中文一区二区| 伊人久大| 久久久久成人网| 极品出轨视频网站| 78m成人视线| 欧美香蕉视xxx| 国产精品网站免费| 国产av色网| 精品国产乱码久久久影院| 97中文字幕一区| 9精品久久久久| 亚州高清AV| 五月情色天| 九九九久久久| 日韩免费大片一级播放| 日本护士高潮| 久久久久久久久久久97| 91欧美美女日韩国产婷婷| 久偷拍| 青青草手机在线免费观看| 91日产欧美| 综合91网| 91欧美综合| 伊人五月天婷婷| 亚洲黄色视频在线观看视频| 国产av美女被艹的乱叫| 中文字幕五月婷婷免费| 久久人人爽爽爽人久久久| 国产怡红院| 久湿久久 | 久久精品国产亚洲AV无码电影| 婷婷五月天av| 嗯嗯啊啊操死我| 国产女人9999| 99久久99久久免费精品蜜臀| 久操网无码在线| 色五月婷婷中文字幕| 亚洲无码?第一页| 久久中出| 神马精品视频| 日韩精品9区| 欧美后入式| 另类天堂| 日本一二三高清| 国产精品在线一区二区| 日韩免费a级毛片无码a∨| 国产女人高潮嗷嗷嗷叫小说| 中文字幕天天天天天| 曰本特级特黄特色黄色A级网站高清在线免费看| 欧美日韩狠狠爱| 久久性爱精品一区| 蜜臀在线免费观看在线免费观看| 日韩人妻无码不卡网站| 免费一级特黄特色大片在线观看看| 欧美日动态视频| 日韩99精品视频综合区| 亚洲情色五月天| 亚洲久久天堂| 3P乱轮视频| 偷拍亚洲高清图片| 国产福利合集| 色综合91| 亚洲黄色电影| 5278欧美一区二区三区| 艳尻美人妻| 婷婷色香伊人| 亚州操操穴网| 精品亚洲俞拍视频一区| 亚洲久9| 国产精品无码久久久久2025| 岛国AV一区二区电影| 综合少妇网| 日韩激情啪啪| 蜜臀99久久精品| 五十路三级片| 欧美性综合| 密乳AV免费观看| 91麻豆天美国产| 国产97在线视频| 98色网| 欧美自拍网| 九九av| 久久久久深夜无码| 久热婷婷| 91殴美| 吻戏激情性巴克| 日夜精品| 亚洲中文字幕妇伦久久| 天天夜躁日日躁狠狠2002| 殴美牲| av影片在线观看不卡| 久草精品热视| 永久免费av无码网站国产app| 99久久久无码| 三级网色| 99精品九九九九九九| 男人把坤坤插入女人的下体| 69麻豆天美| 超碰亚洲97| 黄色香蕉视频网站一区| 欧洲精品久久| 呦呦影院| 亚洲天堂另类小说男人| 97精品久久久久中文字幕| 色色毛片| 国产日韩欧美| 99re在线观看| 密乳无码| 啊啊啊不要嗯嗯在线观看| 欧美国产操逼| 日本三级A片网站com| 探花精品 一区二区| 1024亚洲中文字幕久在线看片你懂的| 久久久无码精品人妻二区| 在线无码视频| 青青青青青手机视频| 八人操人人摸人人看| 性爱AV天堂| 蜜乳av一区二区| 日本2020一区二区| 日韩懂色网| 欧美日韩国内不卡| 亚洲一区在线观看欧洲| 美女高潮视频91| 岛国人妻少妇av在线观看| 高清不卡一二三区视频......| 射综合网| 日韩操逼HD| 欧亚日韩三区| 本道综合精品| 视频不卡中文字幕| 色综合久久88色综合久久天天| 欧美强奸乱| 伊人丝袜美腿高跟在线观看高清| 精品久9| av强奸乱轮| 久久久五月天| 精品在线观看视频在线| 亚洲欧美九九| 激情四射婷婷四五月天| 色嗨嗨在线| A V少妇特黄三级| 成人性爱视频在线看| 日韩中文字幕av在线播放| 国产粉嫩出水在线播放| 色黄色美女大长腿午夜视频| 久久在线观看免费视频| 一本色道久久综合狠狠操| 富二代亚洲精品99| 欧美男人一区| 少妇超碰在线| 国产精品亚洲一区二区三区四区| 精品欧美А∨无码黑人大荫蒂| 欧美资源| 看免费一级在线播放毛片| 伊人操| 97在线欧| 久久久月天| 狠狠干,狠狠操| 久久久久久久91| 蜜臀久久99'精品久久久| 国产成人亚洲精品无码最新在线| AV女资源| 日本媚薬中文字幕在线| 国产99999| 欧美高清色| 三级色影综合网| 精品高清一区二区三区三州| 加勒比无码毛片| 用力操死我| 国产精品一区二区久久精品| 麻豆国产97在线| 精品91| 欧美97在线欧| 999久久久九九九九| 久久黄黄黄| 97碰久久| 强被迫伦姧在线观看无码网站| 日逼97| 日韩av不卡在线看| 94色色电影网| 丝袜人妻av一区二区| 亚洲精品少妇| 欧美1区二区三区公司| 国产av美女被艹的乱叫| 人妻 制服 日韩 中文 在线| 亚洲阿v天堂在线| 日本黄大片在线观看视频| 五月丁香黄色网| 久久久久九九九九| 91香蕉视频在线观看免费| 欧美成人A天堂片在线观看| 亚洲高清国产理伦片| 欧美亚洲日本激情在线| 丁香五月影院| 久久久男人的天堂| 加勒比色99999| 91内射| 狠狠操夜夜| 狠狠激情综合狠狠操中文字幕| 日韩操人| 97色妞| 久夜操| 成人av福利在线观看| 玖玖爱免费观看视频| 一区二区 韩日AV| 亚洲Av噜噜一区二区三区妖精| 欧美性爱超碰97| 欧美亚洲日韩16色| a一区二区三区乱码在线| 国产精品视频内谢女人| 亚州精人品大香蕉| 有码色中文字幕在线观看| 亚洲97久久精品亚洲| 色臀aV| 99热婷婷| 国产精品熟女丝袜一区二区| 久久九九网| 少妇500双飞99| 双插性欧美一二三区| 丝袜亚洲综合| 国产成人bd在线观看| 中文字幕一区二区三区视频播放| 60秒试看最爽10分钟网站| 欧美激情精品久久久久久| 日日爱99| 国产超碰人人操| 蜜桃在线观看一区二区三区| 欧美一级二级三级| 黄片不用下载在线观看| 啊啊啊啊啊在线视频| 成人性生活高清视频在线播放| 久久久国产av美女私房| 婷婷五月花| 91欧洲入口| 91精品国产91久久福利| 国产视频一区二区在线| 日1区2区3区2020| 久久成人午夜精品影院| 天天α片| 日本操逼无码| 北京专精特新企业招聘信息| 久久久日本电影| 十八禁视频网站| 97欧美久久久久久久| 夜夜草我| 国产一区麻豆免费观看| 色欧美综合| 蜜臀久久一区二区| 亚洲欧美清纯| 人妻少妇久久久| 熟妇人妻精品一区二区| 操人无码| 亚洲人综合19| 婷婷三区| 91久久久亚洲| 日本亚洲vr欧美不卡高清专区| 精品女同一区| 色999;丁香五月| 91n处女在线观看| 亚洲强奸乱伦影视网| 中文字幕色AV| 最新国产亚洲精品精品国产亚洲综合| 青青久日| 偷拍 精品另类 凸凹了四区| 99热销国产这里有精品| 偷拍欧美综合| 午夜啊啊| 亚洲 图片 欧美 色图| 影音先锋少妇| 亚州春色| 国产一级αv免费看片| 日韩本不卡视频在线观看 | 久久亚洲日韩国产欧| 一起草日韩| K8久久久久| 婷婷五月天激情小说| 久久久久久久97| 欧美色图私拍91| 国产一区二区三区白丝| 蜜臀va69| 亚洲有薄码区日本系列中文字幕| 免费精品国偷自产在线在线 | 亚州精品人妻一二三区| 色五月婷婷五月天| 无码国产精品96久久久久孕妇| 国产久久日韩网站导航| 国产1769在线| 亚洲图片欧美偷拍| 大香蕉99热| 日韩无码黄色片| v91av| 午夜福利 成人 91| 激情六月婷婷| 天天摸夜夜添无码小视频| 日本 情色 1区2区3区| 国产一级片| 天天谢天天干| 欧美综合色| 四虎免费看黄| 日韩欧美国产一区二区三区四区| 五十路熟女人妻一区二区在线观看 | 在线视频五十市| 五月丁香社区婷婷日韩欧美精品影院 | 香伊人在线| 99re在线视频| 色 婷97| 99re国产中文字幕| 欧美偷拍区| 九九九国产| 中亚黄色三级大片 | 97人人夜| 亚洲一区制服诱惑| 亚洲性猛交| 夜夜肏2021| 中文字幕一区日韩精| 亚洲午夜蜜臀| 亚洲日韩熟女人妻高清在线| 日韩久久超碰色| 亚洲色五月| 熟女字幕| 精品中文字幕一区二区l - 百度| 搡老熟女免费视频| 一区二区高清视频| 欧美人妻一区二区| 久久97资源 网| 激情五月综合网| 久久无码成人| 两女互慰AV高潮喷水在线观看| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 欧美日韩理论一区| 亚洲精品美女久久久久久久久| 天天谢天天干| 97在线观看| 91丝袜在线观看| 精精品人妻一区二区三区| 任你干在线视频| 欧美猛交黑寡妇中文字幕| 婷婷亚洲五月***久久| 青青青草原| 后入式在线免费观看60秒| 亚洲日本韩国极品一区二区| 五月丁香在线| 久久久精品国产亚洲伊人| 日韩av乱伦| 99热这里只有精| 亚洲一区日韩| 五月丁香综合激情| 亚洲国产第一页综合视频| 一级A啪啪啪啪| 91日本在线观看| 五月天成人综合| 亚洲激情av| 日本高清电影欧美色图| 97午夜剧场日韩| 久久综合乱子伦国产免费| 国产日韩精品一区二区三区| 久久天天摸| 麻豆AV96熟妇人妻| 九九超碰综合网| 久久久9 9 9精品| 亚洲欧美洲综合| 亚洲精品久久久久久久蜜桃臀| 亚洲欧美清纯| 久久久久久久伊人精品| 精品九九国产无码| 色婷婷综合网站| 亚洲日本韩国极品一区二区| 91色综合激情| 午夜福利 成人 91| 国产一区二区三区高清视频| 老外又粗又长一晚做五次| 国产黄色 A 片免费看| 任你艹| 99re视频在线观看这里只有精品| 最新一二三区视频| 一本久久精品中文字| 一本久久久精品| 欧美性爱综合,免费| 国产成人拍国产亚洲精品| 丝袜熟女一区二区三区| 岛国AV一区二区电影| 一区,二区,三区视频| 久热精品在线| 国产最火爆久久国产网站网站| 伊人影院综合是一个与深夜成人在线| 丁香五月激情网| 啊啊啊好大好湿| 超碰97人人乐| 精品丝袜无码一区二区三APP| 亚洲国产精品有声| 色嘟嘟人妻天堂网| 免费99精品国产自在在线| 999精品女人| 国产精品自在线发布| 在现视频女上位好爽| 欧美传媒一区| 色欲Av人妻精品一区二| 久久婷五月天| 精品一区二区三区四区外站| 日韩免费中文字幕视频| 亚洲色色色| 黄日韩| 免费观看成人www精品视频| 五月天婷婷久久| 啊啊啊好大好湿| 国产精品美女久久久久久网站| 亚洲精品久久久久毛片A片拉屎 | 91精品在线播放| 国产精品白领在线观看| 五月丁香色综合| 青久久| 欧美日韩黄片精品在线| 伊人国产av| 免费黄色片。| 成年男人的天堂| 极品国产内射| 国产人妻精品久久久一区二区三区 | 91社操逼| yy少妇精品久久| 国产成人91一区二区三区| 草草影院在线视频| 日韩91网| 五月丁香| 国产97免费视频| 日韩精品一区二区三区色欲 | 强奸乱伦Av网| 牛牛久久国产精品视频一二三| 无码不卡亚洲成?人片| 日产狠狠干| 青青草依人大香蕉| 可以免费观看的av| 成人国产二区三区在线,男女精品。| 久热伊人| 91久久久久久| 欧美精品999| 国产精品第一页国产大屁股视频免费区i| 青娱乐国产剧情av一区| 亚洲码专区| 大屁股熟女一区二区三区| 国产黄色剧情影片麻豆免费播放| 国产 三级自拍| 成人老鸭窝人人在线视频| 91色图| 欧美夜夜狠| 青娱乐91| 九热大香蕉| 91性高朝久久久久久久久| 美女露胸露奶头| 亚洲伊人a线观看视频| 色婷婷网| 男人的天堂 在线一区| 久久极品伊人| 久久伊人最新网址视频| 麻豆国产原创AV色哟哟| av爱爱爱| 91视频女生| 91日本在线观看| 清纯唯美亚洲| 亚洲。日韩。欧美| 人人操人人叉人人插人人| 黄站在线免费观看| 九九热视频在线观看| 欧美人与动性人交a| 久久一二三四不卡 | 亚洲天堂热| 日韩精品高清资源在线| 久操频道免费在线呗看| 男人天堂新| 中文字幕日韩情色| 夜夜天天噜狠狠爱2021| 97中文字幕色| 两女互慰AV高潮喷水在线观看| 欧美一级欧美三级在线观看 | 亚洲色图综合网| 精品v日韩欧美国产| 日韩偷拍一区二区三区| 欧美日韩国产三级黄色| 骚鸭AV| 日欧美色| 五月激情小说| 久久精品日韩| 欧美精品宗合| 美女天天干| 九九热精品在线| 成人小说视频在线精品欧美| 91综合网在线| 97热视频在线观看| 亚州操操穴网| 一起草av| 免费操逼视频下载| 日本一级特级毛片视频| 亚洲黄色电影| 97视频新免费| 2025亚洲男人天堂| 日本 欧美 亚中文字幕| 国产精品干干干| 欧州一区二区三区四区| 五月天精品| 亚洲日韩欧美一区二区| 啊啊啊啊啊在线观看网址| 大黄片做爱的大的| 亚洲天天操| 婷婷激情五月综合| A一级色女| 欧美激情亚洲色图| 91熟女熟妇视频网站| 国产精品久久久久久久毛片1| 97在线观看| 久久久无码精品人妻二区| 成人在线午夜视频一区| 99re这里只有精品3| 色综合久| 国产 亚洲 丝袜 制服| 蜜乳AV免费观看| 国产午夜在线观看| 91熟女丨老女人| 国产精品伦理| 久久噜噜噜精品国产亚洲综合| 久久久久9999精品九九九| 久久久久久久少妇| 亚洲欧美九九九| 日本有码久久| 中文字幕一区 二 区 三 四 五 区日 日 骚| 玖玖爱免费观看视频| 国产女人操逼视频| 日韩国产乱子伦App| 蜜乳中文字幕a在线| 91在线精品一区二区三区| 午夜精品久久久久久久久久久久久| 变态另类专区| 中出20p| 96超碰网| 啊啊啊啊嗯嗯在线久久久| 日日骚一区二区三区| 亚洲美腿丝袜香蕉影视欧美成人| 亚洲欧美校园| 天天操妹子| 亚洲综合欧美| 亚洲成人激情小说视频| 久操电影| 17c在线成人免费A片观看| 午夜视频久久久久一区| 国产女人与拘做受视频免费| 在线国产福利网址导航| av资源在线播放天堂| 91精品大奶人妻| 久久天天摸| 素人美腿视频网站| 欧美亚洲厕所精品偷拍91| 蜜屁Av| 午夜福利1区2区3区| 久久大香蕉97| 午夜精品久久久久久久久久久久久| 亚洲综合在线91| 91一区二匹| 毛片久久| 欧美日韩免费性爱| 日本久久精品| 日本一区二区电影网站| 国产第11页| 国产精品999aaa| 欧美一区二区日韩三区| 狼狼色丁香久久婷婷综合五月| 婬女免费一二三区A片| 五月香婷婷| 青青草啪啪网| 综合网亚洲1| 国产午夜精品理论片一二三区区| 极品综合| 日韩精品一区二区三区四虎影视| 歐美一級亂黃99在綫精品| 欧美亚洲高清晰| 啊啊啊想要| 少妇综合网| 日韩欧美俄罗斯A片| 日本一久是| 欧美美女在线高潮999| 五月天精品| 婷婷婷婷婷婷久久久久| 日韩一级特黄av毛片| 五月丁香色综合| baiduhicn.com。| 91欧美www| 中日亚韩免费视频| 蜜臀av在线播放一区二区三区| AV99热18这里只有精品| 免费视频一二三区| 精品综合久久久久久97| 性色综合网| 可以在线观看的黄色网址| 久久性爱城| 欧美成人精品一区二区三区| 热久日综合| 国产精品人妻免费精品| 国产亚州日韩欧美看片| 美日韩一二三区| 美欧色综合| 精品国产精品一区二区| 人人搡人人肉久久精品| 久久精品国产精品一区| 97人人干| 日曰骚久久精品| 精品日韩人妻视频| 精品网站99999| 超碰人妻久久| 亚洲精品第一| 蜜臀AV成人精品蜜臀| 天干天干天干天天做| 新婚人妻扶着粗大强行坐下| 国产精品经典一卡久久久 | 亚洲成人AB| 在线岛| 99国产在线绯色一区| 欧美性色网| 五月天综合| 超碰色大香蕉| 国产亚洲色婷婷久久99精品91| 久久熟女久| 最新中文字幕精品在线| 神马久久久久久久久久| 久久久国产av美女私房| 超AV色女| 国产97在线视频| 色妺妺在线视频| 欧美人妻少妇| 夜夜爽妓女| 91东北熟女| 久久9亚洲| 操国产逼| 欧美成人综合| 91丨人妻丨国产丨丝袜| 乱理日韩中文| 国产夫妻性生活视频| a在线观看| 超碰9 7女人| 婷婷视频在线免费观看| 久久久一二三四区| 久久丁香五月婷婷| 有码专区最新中文字幕有码| 欧美综合自拍成人自拍第二十页| 欧美综合1性辶| 蜜色网色哟哟| 国产精品久久久久无码Av网曝门 | 久热这里| 91黑丝在线播放| 久久激情婷婷| 无码视频一区二区| 丰满人妻无码一区二区三区| 天天操天天干美女网址导航| www色色com| 日韩精品在线放| 国产精品久久久777| 欧美麻豆成人同性GⅤ在线| 大香蕉99热| 欧美日韩性爱精品| 午夜性刺激视频免费观看| 久久久久久久久久久人妻| 免费公开人人操| 玖玖无码超碰| 九九热超碰97亚洲最新香蕉 | 日本在线不卡一二区| 香蕉99秘 一区精品蜜桃臀| 午夜欧美J进J出白浆流出久久久| 97在线免费视频| 亚洲美女黄色| 亚洲欧洲小说图片视频| 久久伊人亚洲AV无码网站| 91久久久久| 91女在线观看| 亚洲少妇中文字幕网址| 亚洲资源站| 91性| 天堂蜜桃无码视频一区二区| 26uuu性物| 久久大香蕉97| 性色av一区二区| 大香蕉丝袜一级片| www.av在线视频| 日本 情色 1区2区3区| 佐山爱中文字幕| 欧美成人精品A片免费一区99| 操国产高清| 精品女同一区二区三区| 91老司机在线视频免费观看| 大香蕉黄色一区| 国产成人超碰在线| 91性网| 大香蕉啪啪啪啪在线| 亚州色交| 91人妻尻屄视频| 日本性爱欧美性爱| 超碰97人妻在线| 怡红院久久老司机| 2003天天干夜夜操| 天天做天天爱天天爽AV| 久久一二三四五六七八九区区区 | 伊人久久亚洲色欲综合网站 | 国产白丝AV| 久久熟女嫩草成人片免费| 色婷婷成人综合| 精品久久久久,69国产成人精| 天堂俺去俺来也www久久婷婷| 久久精品国产亚洲AV先锋| 亚洲资源吧| 亚洲综合一| 九九九久久久久| 九九久久国产精品| 天天干天天操天天拍| 小泽玛利亚一二三| 成人国产精品三级A片| a级成人毛片免费视频高清| 国产精品久久久无码aV去| 操碰97| 风韵犹存大大大大香蕉 | 日韩欧美日韩| 大JI巴好深好爽又大又粗视频| 伊人9| 99热这里只有精品1| 亚洲性猛| 欧美日韩亚洲国产中文永久天天看| 欧美亚洲影视| 丝袜综合色图| 久久久噜噜噜久久久| 久九九九九九九热| 人妻一区久久二区三区色播| 熟妇熟女亚洲天堂网| 久久久久骚| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 午夜啪| 日本一区二区亚洲综合| 東南亚性呦成人伦理资源在线视频| 操淫穴亚洲五月丁香| 操逼短片| 欧美中字不卡| av2014 日韩在线中文字幕| 伊人96在线| 综合网少妇| 青青草一区二区高清无码视频| 精品人妻15区| 偷拍 亚洲 欧美| 欧美性91| 秋霞操逼片| 欧美亚洲素人制服精品| 精品成人亚洲午夜电影| 强奸乱伦AV网站| 人人透人人操| 五月丁香六月婷| 五月激情天| AV高清一区| 日本男人插女人的逼黄色| 不卡六六在线91| 欧美日韩小说| TS人妖另类精品视频系列| 18禁中文字幕| 国产操逼逼网| 青青操青娱乐| 台湾佬中文娱乐自偷自拍| 加勒比AV天堂| 超碰色美女| 中文字幕av亚洲精品| 乳欲人妻办公室奶水| 亚洲精品a人片在线观看视| 啊啊啊啊一区| 日han少妇无码| 国产自偷| 我要去看2个日本美女.com曹逼| 中文字幕一区二区三区四区在线视频| 26uuu国产成人综合| 久久综合九九| 午夜欧美神马久久久久| 亚洲情色 无码专区| 秋霞 色色| 精品一区二区成人动漫| 又大又长又爽| 日日嗷| 夜草网站| 中文字幕 国产区| 色婷婷婷五月天激情四射| 欧美色图小说综合| 翔田千里一区二区三区奶水| 在线无码操| 久久嫩草国产成人一区| 精品一区96| 97伦综合| www.大香| 9久综合网| 久久久一二三四区| 91 丝袜在线播放| 一区二区三区 日韩欧美| 超碰97资源大奶| 伊人欧美大香蕉视频| 一级特黄aaa大片在线观看成人一级片在线观看 | 麻豆国产尤物AV| 顶级少妇BT天堂| 日韩另类色图| 偷拍综合亚洲| 亚洲一本色码中文字幕| 欧美 亚洲| www.人人cao| 中文字幕天天操| 日韩性爱小视频| 熟女被操视频网址| 日本中文字幕熟妇| 91人精品妻入口| 五月婷在线| 日韩本不卡视频在线观看 | 一区二区三区在线日韩影院观看| 九九精品无码专区免费| 麻豆天美国美国产AV| 国产区在线| 99ri在线视频| 蜜桃狠狠色伊人亚洲综合 | 狠狠色狠狠色狠狠五月| 伊人青青一区成人视频在线观看区| 国产搭汕a级片| 久久香蕉综合一本到3atv| 日本熟妇色熟妇在线视频播放| 国产一区免费午夜视频| 97精品国产97久久久| 91老熟妇| 婷婷五月天补不补| 色欲av国内精品久久久久久| 五月天激情小说| 日本视频在线中文字幕| 欧美97av| 国产精品嫩草久久久久| 精品一久久久| 人妻偷拍一区二区三区| 蜜臀精品1区2区| 搡老熟女免费视频| 精品少妇一区二区三区在线视频| 亚洲鸥美色图| 国产精品嫩草久久久久| 欲射影视| 日本影视久久免费| 日夜啪电影| 精品无码久久久久久久久果冻糖心| 先锋精品av色鲁| 中文字幕三四区| 97中文字幕色| 伊人网青青| 夜夜 中文视频rt| 久久久新亚洲AV| 成人色女网| 无码WWW免费视频网站| 长久操视频| 综合色99| 欧美亚洲中文| 蜜桃中文字日产乱幕4区| 国产日韩精品无码去免费专区国产| 国产一区二区三区中文字幕| 91日韩国产欧美亚洲另类精盘州至城都| 床上啊啊啊一区二区三区| 青青草福利视频| 白丝少妇一区二区| 国产伦乱91| 美女性91| 欧美色天堂网在线视频| 免费A V在线| 欧美 亚洲精品首页| 欧美色图偷拍另类| 久久男人精品| 丝袜美腿丝袜| 久久综合女优| 国产 无码 一区二区| 水滴偷拍| 久久久99999久网站| 90后性网国产欧美| 亚洲āv网址在线观看| 欧美色图在线视频少妇| 婷婷久久综合| 自怕偷自怕亚洲精品| 99re8免费高清在线| 欧美 亚洲 偷拍自拍| 国产欧美日本亚洲精品| 久久久精品一区二区| 极品丝袜无码| 黄片在线免费在线观看| 精品黄色电影| 青青草久久一区网| 日韩欧美中文| 桃花色综合影院| 欧美丝袜中文字幕07在线| 99啪啪视频| 婷婷五月天激情网| 韩国免费播放一级毛片| 亚洲色棕合| 情色五月天网| 成人综合色网| 五码视频在线观看| 国产精品爽爽v| 天天网综合| 国产丝袜美腿美女麻豆| 人妻日日干| 少妇一级婬片免费放一级a性色.| 国产精品高朝久久久久久久| 久九九九九九九热| 激情小说五月天| 国产亚洲日韩在线三区黑人| 激情综合网亚洲| 精品国产99999| 国产视频第2页| 亚洲高清内射| 好淫网一二三视区| 精品性爱无码在线播放| 东北丰满熟女国产一区| 国产精品久久天天干| 91欧美综合| 一区二区三区一亚洲中文字幕、综合区灬 | 日韩中文字幕二区| 使劲用力艹少妇视频一区二区 | 国产视频三区四区| 久久99久久99久久99人受| 日韩欧美午夜一区二区| 高潮精品| 亚州综合色| 四虎精品永久在线观看| 蜜臀av网址| 日日夜夜骚| 人妻少妇视频在线播放| 亚洲成人美女无吗| 在线综合 亚洲 欧美中文字幕 | 长长久久88视频| 日韩精品一区的| 首页中文字幕中文字幕免费| 欧美 日韩 亚洲 春色| 久久精品无码熟妇一区二区三区视频导航 | 欧美性爱免费短视频| 国产亚洲日韩欧| 亚洲欧美日韩偷拍色图| 91久久青青草原精品| 日本视频在线中文字幕| 色噜噜国产精品视频一区二区| 亚洲欧洲自拍| 大香蕉一级黄色片久久| 国产深喉视频一区二区| 无码精品久久久久久亚洲|