檢視原始碼 引擎載入

本章節描述在 crypto 應用程式中載入加密引擎的支援。

背景

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">>]