オープン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
dnf install openssl-pkcs11
pacman -S libp11
次に、このエンジンを使うように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`` の部分を省略することで動作するようになります。