オープンSSL

警告

秘密鍵を取得しようとすると、OpenSSLがクラッシュします。秘密鍵は NetHSM からは取り出せないので、これは正常な動作です。代わりに公開鍵を取得するとよいでしょう(以下の例を参照)。

エンジン

警告

エンジン (libp11) のバージョンが 0.4.12 以前の場合、NetHSM に EdDSA キーがあると OpenSSL がキーを見つけられません。バージョン 0.4.12 以前では、キーが要求されると、エンジンは NetHSM 上のすべてのキーを一覧表示します。ラベルまたは ID でキーを検索する場合は、バージョン 0.4.13 以降を使用するか、`libp11<https://github.com/OpenSC/libp11>`__ をソースからビルドすることを推奨します。エンジンのバイナリは``src/.libs/pkcs11.so`` になります。

OpenSSLエンジンインターフェースは、OpenSSL用のカスタムバックエンドを実装するための古い方法で、OpenSSL 3では非推奨となっています。

PKCS#11 モジュールをセットアップする必要があります。` <pkcs11-setup.html>`__ 以下の手順に従ってください。

エンジンを取り付ける:

apt install libengine-pkcs11-openssl

次に、このエンジンを使うようにOpenSSLを設定する必要がある。これは``openssl.cnf`` ファイルに以下の行を追加することで行う:

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so
init = 0

注釈

環境変数``OPENSSL_CONF`` を使って、OpenSSLにOpenSSL設定ファイルのパスを指定することができます。

警告

メインのOpenSSLコンフィギュレーション・ファイルがこれらの行だけを含むように変更されると、OpenSSLを使用する他のプログラムを壊してしまう可能性があります。したがって、エンジン用に別のコンフィギュレーション・ファイルを作成した方がよいでしょう。

/usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so を、先にインストールしたPKCS#11モジュールへのパスに置き換える。

/usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so をインストールしたOpenSSLエンジンのパスに置き換えてください。パスはディストリビューションによって異なります。engines-3 の数字はOpenSSLのバージョンに対応しています。Debian の場合、OpenSSL 3 エンジンのパスは``/usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so`` です。Fedora の場合は``/usr/lib64/engines-3/libpkcs11.so`` です。

`PKCS#11 URI<https://www.rfc-editor.org/rfc/rfc7512>`__ を使用することで、NetHSM 上で鍵を使用できる:

engine:pkcs11:pkcs11:object=webserver;type=private

これには``webserver`` というキーが使われる。

注釈

GnuTLS <https://gnutls.org/>` から``p11tool`` コマンドを使えば、鍵の完全なURIを取得できる:

p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so --list-all

コマンド例

NetHSM上の非対称鍵ペアの公開鍵を取得する:

openssl pkey -engine pkcs11 -inform ENGINE -in "pkcs11:object=webserver;type=public" -pubout

プロバイダー

OpenSSLプロバイダー・インターフェースは、OpenSSLのカスタム・バックエンドを実装する新しい方法です。`pkcs11-provider バックエンド<https://github.com/latchset/pkcs11-provider>`__ はまだ開発の初期段階です。

PKCS#11 モジュールをセットアップする必要があります。` <pkcs11-setup.html>`__ 以下の手順に従ってください。

プロバイダーをインストールする。Fedora には``pkcs11-provider`` というパッケージが存在する。他のLinuxディストリビューションでは、`ソースからビルドする必要がある<https://github.com/latchset/pkcs11-provider/blob/main/BUILD.md>`__

次に、プロバイダーを使用するようにOpenSSLを設定する必要があります。これは、openssl.cnf ファイルに以下の行を追加することで行う:

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
pkcs11 = pkcs11_sect

[pkcs11_sect]
module = /home/sautax/git/pkcs11-provider/src/.libs/pkcs11.so
pkcs11-module-path = /usr/lib/libnethsm_pkcs11.so
activate = 1

module をインストールしたプロバイダーのパスに、pkcs11-module-path をインストールしたPKCS#11モジュールのパスに設定する。

NetHSMをデフォルトのプロバイダーとして設定したい場合は、default = pkcs11 を``provider_sect`` セクションに追加してください。

注釈

環境変数``OPENSSL_CONF`` を使って、OpenSSLにOpenSSL設定ファイルのパスを指定することができます。

警告

メインのOpenSSLコンフィギュレーション・ファイルがこれらの行だけを含むように変更された場合、OpenSSLを使用する他のプログラムを壊してしまう可能性があります。したがって、プロバイダー用に別の設定ファイルを作成した方がよいでしょう。

その後、`PKCS#11 URI<https://www.rfc-editor.org/rfc/rfc7512>`__ を使用することで、NetHSM 上で鍵を使用することができる:

openssl pkey -provider pkcs11 -in "pkcs11:object=rsakey" -pubout

NetHSMをデフォルトのプロバイダーとして設定した場合は、-provider pkcs11 引数を省略することができる。

注釈

現在、手動でURIにキータイプを設定する場合、プロバイダはキーを見つけることができません。URI の``;type=private`` または``;type=public`` の部分を省略することで動作するようになります。