こんにちは、皆さん。
SE050 を node.js Web サーバーで使用できるように統合しようとしています。OpenSSL プロバイダーを含むミドルウェアを正常にコンパイルし、ssscli も動作するようになりました。
ssscli を使用してキー ペアを作成し、それを SE に挿入して refpem キーを作成しました。また、システムの openssl.cnf を simwtop/demos/linux/common/openssl30_sss_se050.cnf のものと一致するように調整しました。
しかし、OpenSSL は SE050 プロバイダーを呼び出す代わりに、キー スロットへの参照を実際の秘密キーとして使用するため、サーバーへの TLS 接続はハンドシェイクで失敗します。
また、OpenSSL CLI (openssl s_server) でも動作するようにしてみました。nxp:
次のコマンドを実行するとエラーが発生します。
openssl s_server -accept 12345 -cert server.pem -key server.refpem.key -CAfile root.pemエラー:
SSL3 alert read:fatal:decrypt error
SSL_accept:error in error
ERROR
20203CA4FFFF0000:error:1B80006E:lib(55):ossl_parse_query:trailing characters:../openssl-3.0.13/crypto/property/property_parse.c:454:HERE-->/usr/lib/libsssProvider.so
20203CA4FFFF0000:error:0A00041B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:../openssl-3.0.13/ssl/record/rec_layer_s3.c:1590:SSL alert number 51
shutting down SSLただし、nxp URL スキームを使用すると、サーバーに正常に接続 CAN ます。
openssl s_server -accept 12345 -cert server.pem -key nxp:0x6789ABCD -CAfile root.pemただし、node.js コードで nxp:0x6789ABCD キー参照を指定することはCANず、refpem ファイルを使用する必要があります。それをなんとかする方法はあるでしょうか?
また、設定ファイルでプロパティクエリを指定して、OpenSSL がデフォルトのプロバイダーよりも SE050 プロバイダーを優先するようにしてみました。しかし、今のところ運がない。
# Relevant parts from openssl.cnf
[openssl_init]
providers = provider_sect
alg_section = evp_properties
[provider_sect]
default = default_sect
nxp_prov = nxp_prov_sec
[default_sect]
activate = 1
[nxp_prov_sec]
identity = nxp_prov
module = /usr/local/lib/libsssProvider.so
activate = 1
[evp_properties]
default_properties = ?provider=nxp_provどのようなご助力もいただければ幸いです。
私が使用している Node バージョンは 20.12.2 であることをお伝えするのを忘れました。
20.x 以降のバージョンではこの問題は発生しない可能性がありますが、現時点ではこれを確認する方法がありません。
さらに調査を進めたところ、クライアント側の復号化の問題は、プロバイダーの読み込み順序が間違っていたために発生したことが判明しました。
そうは言っても、このバージョンの Node では乱数生成の処理に問題があることが判明しました。
この問題は、Node がプロバイダーを初期化する方法に関連しています。
具体的には、乱数ジェネレータの初期化で、sss_rand_get_ctx_params への呼び出しの無限ループが発生します。
node.cc ファイルには修正が含まれています (ソースにコメントが含まれています) が、libsssProvider.so では機能しません。
同じような状況に陥った人のために、いくつかの回避策を紹介します。
まず、これらはすべて libsssProvider に関連しており、主に Node または OpenSSL を変更しないことを目的としているSO、他のよりクリーンなソリューションが可能であることは明らかだと述べます。
コードを共有することはできませんが、以下の情報が十分に明確であることを願います。
利用可能なオプション:
1.CMakeLists.txt ファイルで、SSS_PROV_DISABLE_SE05X_RNG 変数を設定します。
これにより、ランダムに対する SE05X の使用が完全に無効になります。
理想的ではありませんが、特別なニーズがない場合は機能します。
2. sssProvider_main.cファイルで、指定された名前が既知の名前 (特にデフォルトではない名前) にならないSO、srands 構造体のアルゴリズムを変更します。これにより、openssl 構成ファイルでランダム キーを設定することで、必要に応じて SE05X ランダム モジュールを使用できるようになります。
3. ポイント 2 と似ていますが、このCASE、名前はオプションで環境変数で提供されます (srands は明らかに定数にすることはCANません)。この方法では、Node アプリケーションの場合にのみ、SE05X 乱数ジェネレーターの使用を回避し、代わりに他の用途でアクティブなままにすることができます。
refpems はこれらのオプションで正しく動作します。
私も@tksecとまったく同じ問題を経験しています。
OpenSSL cli ツールを使用してすべてが正常であれば、libsssProvider.SO を介して SE052 モジュールのキーを使用する TLS 接続を確立でCAN。
Node.jsでは、libsssProvider がロードされていることを確認しましたが、以下のエラーのように、ハンドシェイクは常に失敗します。
SSL3 アラート書き込み:致命的:復号化エラー
SSL_connect:エラーでエラー
20109DB6FFFF0000:エラー:0A00007B:SSLルーチン:tls_process_cert_verify:不正な署名:/usr/src/debug/openssl/3.2.1/ssl/statem/statem_lib.c:584:
@Kan_Liが提案したように、ID でキーを参照することは実際には機能しないようです。
- options.key に refpem ファイルへのパスを指定すると、サーバーは問題なく起動し、接続をリッスンしますが、報告されているようにハンドシェイクは失敗します。
- options.key にキーパスを urk (nxp:
- options.key にキー参照 (nxp:
SO、 @Kan_Liさん、これが問題なく動作するはずであると仮定して、サーバーを正常に初期化できる Node.js コードを共有していただけますCANか?
よろしくお願いします。
こんにちは@tksec 、
node.js でキー参照を使用する適切な方法を見つけましたか?
私も同様の問題を抱えています。OpenSSL 3.0.14 で se05x-openssl-プロバイダ (v01.00.03) を使用してキー ペアを生成していますが、openssl プロバイダの Github リポジトリの Readme ファイルに記載されている「ファイル形式の参照キー」を使用できません。
他の2つのバージョン(参照キー付きのラベリング(例:nxp:"参照キーファイルへのパス")と
キー ID 付きのラベリング (例: nxp:0x12345678) は正常に機能します。
Readme には次のように記載されています。「注意: この方法を使用する場合は、まず sss プロバイダをロードする必要があります。これにより、sss プロバイダが参照キーに存在するキー ID 情報をデコードできます。 」
残念ながら、その方法が分かりません。プロバイダーを openssl.cnf ファイルに追加してロードしても機能しませんでした。ファイル形式で参照キーを使用しようとすると、依然として復号化エラーが発生します。
よろしくお願いします。
よろしくお願いします
トーマス
こんにちは@tksec 、
情報ありがとうございます!refpem ファイルを使用するユースCASEは何ですか?署名と検証?ここでこの問題を再現してみようと思います。
よろしくお願いいたします。
カン
こんにちは@Kan_Liさん
はい、ssscli ツールを使用しました。MW v4.05.00を実行しています。別のシステムで OpenSSL を使用して元のキーを作成しました。ssscli set コマンドを使用して SE にロードし、ssscli refpem コマンドで refpem を作成しました。s_client、s_server、rsa などの openssl コマンドを使用する場合、キーは正常に使用および解析CAN。これは、OSSL_STORE API (openssl コマンドが内部的に実行するもの) を使用して EVP_PKEY に変換することもCANますが、NXP エンジン (EmbSe_LoadPrivKey 内) と node.js の両方で使用される PEM_read_bio_PrivateKey を使用して解析することはできません。
よろしくお願いします!
こんにちは@tksec 、
RSA キーの refpem をどのように生成しましたか? ssscli のツールで?現在どのバージョンのMWを使用していますか?ご説明をよろしくお願いいたします。
すてきな一日を、
カン
---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------
こんにちは@Kan_Li
refpem キーは openssl エンジンでのみ使用可能であることを明確にしていただきありがとうございます。特に node.js の問題は、提供されたキー文字列に対して PEM_read_bio_PrivateKey 関数を直接呼び出すことです。キー文字列が PEM 文字列やファイル パスではなく uri の場合、明らかに失敗します。OpenSSL プロバイダーに対する直接的なサポートはまだありません。
代わりに OpenSSL エンジンの使用に戻しましたが、同様の問題が発生しました。EC キーの使用は完全に機能しますが、RSA キーを使用すると、OpenSSL からのエラー:1E08010C:DECODER routines::unsupported が発生し、PEM ファイルの解析中に再び失敗します。コードをデバッグしたところ、エンジンのコード内の EmbSe_LoadPrivKey 内から呼び出される関数 PEM_read_bio_PrivateKey にエラーが遡って発生していることがわかりました。
OpenSSL エンジンで RSA refpem キーを処理する際にこのような問題が発生することをご存知ですか?これをどう解決すればいいでしょうか?私の場合、refpem は EC キーよりも RSA キーに対してより侵入的であるように見えますが、これが問題になるでしょうか?
こんにちは@tksec 、
refpem キー ファイルは openssl エンジン専用ですが、プロバイダーで openssl 3.xx を使用するため、代わりに "nxp:key_id" を使用してください。「se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient.sh」と「se05x_mw_v04.05.01\simw-top\demos\linux\tls_client\scripts\tlsSeClient_3_0.sh」を比較して違いを確認することができます。また、これに関してセキュリティ上の懸念事項はございますでしょうか。私の見解では、これはほとんどのスクリプトで受け入れられる文字列であるはずですが、なぜNode.jsコードでnxp:0x6789ABCDキー参照を指定できないのでしょうか?ご説明いただけますでしょうか。
すてきな一日を、
カン
---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「正解としてマーク」ボタンをクリックしてください。ありがとう!
- Threadは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいThreadを開いて、閉じたThreadを参照してください。
---------------------------------------------------------------------------------