查看源代码 引擎加载
背景
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
使用确保加载的函数加载
此函数确保引擎仅加载一次,并且 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">>]