檢視原始碼 引擎載入
背景
OpenSSL 公開了一個引擎 API,它可以插入替代的實作,來取代 OpenSSL 實作的某些或所有加密操作。當配置適當時,OpenSSL 會調用引擎對這些操作的實作,而不是它自己的實作。
通常,OpenSSL 引擎提供特定加密操作的硬體實作。硬體實作通常比基於軟體的對應實作提供更好的效能,這被稱為加密加速。
注意
引擎動態連結程式庫的檔案名稱要求在不同的 SSL 版本之間可能會有所不同。
使用案例
從預設目錄動態載入引擎
如果引擎位於 OpenSSL/LibreSSL 安裝目錄的 engines
目錄中。
1> {ok, Engine} = crypto:engine_load(<<"otp_test_engine">>, [], []).
{ok, #Ref}
使用動態引擎載入引擎
藉由提供程式庫路徑,使用動態引擎來載入引擎。
2> {ok, Engine} = crypto:engine_load(<<"dynamic">>,
[{<<"SO_PATH">>,
<<"/some/path/otp_test_engine.so">>},
{<<"ID">>, <<"MD5">>},
<<"LOAD">>],
[]).
{ok, #Ref}
載入引擎並替換某些方法
藉由動態引擎載入引擎,並僅替換一些引擎方法。
3> {ok, Engine} = crypto:engine_load(<<"dynamic">>,
[{<<"SO_PATH">>,
<<"/some/path/otp_test_engine.so">>},
{<<"ID">>, <<"MD5">>},
<<"LOAD">>],
[]).
{ok, #Ref}
4> ok = crypto:engine_register(Engine, [engine_method_digests]).
ok
使用 ensure loaded 函式載入
此函式確保引擎僅載入一次,並且將 ID 添加到 OpenSSL 的內部引擎列表中。後續對該函式的調用將檢查 ID 是否已載入,然後僅獲取對引擎的新參考。
5> {ok, Engine} = crypto:ensure_engine_loaded(<<"MD5">>,
<<"/some/path/otp_test_engine.so">>).
{ok, #Ref}
若要從 OpenSSL 引擎列表中移除標籤,請使用 crypto:engine_remove/1
。
6> crypto:engine_remove(Engine).
ok
若要卸載它,請使用 crypto:engine_unload/1
,它會移除對引擎的參考。
6> crypto:engine_unload(Engine).
ok
列出目前已載入的所有引擎
8> crypto:engine_list().
[<<"dynamic">>, <<"MD5">>]