2

そのため、クライアント証明書 (相互認証) を使用してサーバーに対して認証する必要があるアプリケーションを作成しています。クライアント証明書キーは HSM (Gemalto's) に格納されます。Luna クライアントとの OpenSSL 統合を行いましたが、要求モジュールにはファイルが必要です。

from requests import Session

session: Session = Session()

session.cert = (
    "/ssl/client.pem",
    "/ssl/client.key"
)
session.verify = "/ssl/server.pem"

私の問題は、秘密鍵が HSM にあるときに秘密鍵をバインドする方法が見つからなかったことです。これまでにpycryptokiライブラリで試したことは次のとおりです。

from pycryptoki.session_management import (
    c_initialize_ex,
    c_open_session_ex,
    login_ex,
    c_logout_ex,
    c_close_session_ex,
    c_finalize_ex,
)
from requests import Session

c_initialize_ex()
auth_session = c_open_session_ex(0)
login_ex(auth_session, 0, "some-pass")

session: Session = Session()

session.cert = (
    "/ssl/client.pem",
    "rsa-private-156405640312",
)
session.verify = "/ssl/server.pem"

...

c_logout_ex(auth_session)
c_close_session_ex(auth_session)
c_finalize_ex()

しばらく前にここで問題を開きました。アプリの実装を完了する必要があったため、HSM 統合を氷上に置きましたが、本番環境に移行する前にそれを機能させる必要があります: https://github.com/gemalto /pycryptoki/issues/17

py-hsmも使用してみましたが、これは低レベルの API ライブラリであり、コードの例で問題を開きました。

from pyhsm.hsmclient import HsmClient
from requests import Session

c = HsmClient(pkcs11_lib="/usr/lib/libCryptoki2_64.so")
c.open_session(slot=0)
c.login(pin="some-code")

session: Session = Session()
session.cert = "/ssl/client.pem"

c.logout()
c.close_session()

誰でも HSM の証明書ペアを使用した相互認証の例を提供できますか? C/C++ で何かがあれば、それも素晴らしいでしょう。リクエスト関数を実装して、それを Python コードにラップするだけです。

前もって感謝します!

4

2 に答える 2