使用OpenSSL动态引擎

本文为您介绍如何使用OpenSSL动态引擎。您也可以在应用程序中通过OpenSSL程序化接口使用动态引擎。

前提条件

  • 密码机实例处于初始化状态并且已创建一个加密用户(CU)。具体操作,请参见快速入门

  • 已启动HSM客户端(hsm_proxy)。具体操作,请参见启动HSM客户端(hsm_proxy)

  • 在您开始使用OpenSSL动态引擎之前,请确保OpenSSL支持动态引擎加载。

    您可以使用以下命令来验证它是否支持:

     openssl engine -c

    如果OpenSSL支持动态引擎加载,你将得到一个类似于以下的响应:

     "(dynamic) Dynamic engine loading support"

RSA加密和解密程序

  1. 运行以下命令来导出环境变量。用CU用户的用户名替换HSMusername,用相应的密码替换password

    export LD_LIBRARY_PATH=/opt/hsm/lib/:$LD_LIBRARY_PATH
    export n3fips_password=<HSMusername>:<password>
  2. 运行以下命令来打开交互式模式:

    openssl
  3. 运行以下命令来加载动态引擎:

    engine -t dynamic -pre SO_PATH:/opt/hsm/lib/libhsm_openssl.so -pre ID:hsm_openssl -pre LIST_ADD:1 -pre LOAD

    如果命令运行成功,会有以下响应:

    Loaded: (hsm_openssl) Cavium hardware engine support
  4. 运行以下命令来生成非对称密钥:

    genrsa -engine hsm_openssl

    如果命令运行成功,动态OpenSSL引擎有一种将密钥句柄编码为一种仿制PEM格式的方法。你可以将内容存储在一个文件路径中,例如/root/openssl/priv.key

    -----BEGIN RSA PRIVATE KEY-----
    ****IQIBAAKCAQEAp2R756S3q1/Aa0htOSXovkakVI3ePqkMY4I/AM7j6ZO4lf1b
    l58v0zUqk8c9Eknf8VclGrMz8vqEOMWWXUM6xc4Jq6HRhBbp/SdqTlSW+6WjYcG3
    nMP5PxBIuWLazjS7Mte3n3NSK+qS2jIeUdhr+OPhCdeQfxsDbc9CTz97NNDnoARR
    64nZ/mMTBHXW5dkbgOmTE3plCqB0NctTwXgF3C6z+6/vASJEdXseFV7GS5vATNf4
    i7uEkIIx0791Ped0+3yoBZ31XuAQKcspEab+z3cRdvjUb0YluYF00WDu3D/5bBYW
    0epo6l1r83EhqeAhOviUqQLwMJoLeUxif8RpNQIDAQABAoIBAQDq/Pzu6vz87h8A
    AAAAAAAA6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8
    /O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8
    /O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8
    /O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8
    /O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8/O7q/Pzu6vz87ur8
    /O7q/PzuAgEAAgEAAgEAAgEA****
    -----END RSA PRIVATE KEY-----
  5. 运行以下命令来导出公钥:

    rsa -in /root/openssl/priv.key -pubout -out /root/openssl/pub.pem
  6. 运行以下命令来加密一个文件helloworld.txt

    重要

    这一操作必须在非交互式模式下进行。在这个例子中,文件的内容是hello world!

    openssl rsautl -encrypt -inkey /root/openssl/pub.pem -pubin -in /root/openssl/helloworld.txt -out /root/openssl/helloworld.txt.enc
  7. 运行以下命令来解密一个文件helloworld.txt.enc

    重要

    这一操作必须在互动模式下进行,而且必须已经加载了动态引擎。

    openssl rsautl -decrypt -inkey /root/openssl/priv.key -in /root/openssl/helloworld.txt.enc -out /root/openssl/helloworld.txt.dec