Armadilloフォーラム

Webサーバー(lighttpd+SSL有効)が起動中だと、SE050を利用する処理が不安定

takamura.eiji

2025年8月4日 16時52分

==========
製品型番:AG9130-C03D0
Debian/ABOSバージョン:v3.21.3-at.14
==========
SE050 使用環境において Web サーバーで lighttpd+SSL 構成にすると
curl/openssl/se05x_getkey 系のコマンドが約30秒程度かかり、タイムアウト?してしまいます。

ABOSDE より A9E -> Shell New Project からプロジェクトを生成し、alpine として SWU を作成しました。

lighttpd サーバーの構築は以下を参考としました。
https://armadillo.atmark-techno.com/blog/615/23447

プロジェクトの app/src 配下に以下を配置しました。
main.sh: 起動スクリプト。lighttpd+SSL で起動して Web 直下に sample_log.txt を作成する。
server.crt: 自己証明書で別途作成して配置。
server.key: 秘密鍵で別途作成して配置。
lighttpd.conf: lighttpd パッケージインストール時の初期設定ファイルから以下を追記したもの。

server.modules += ("mod_openssl")
 
$SERVER["socket"] == ":443" {
     ssl.engine  = "enable"
     ssl.pemfile = "/etc/lighttpd/ssl/server.pem"
}

コンテナ起動時に main.sh が呼ばれて lighttpd+SSL で起動します。

この状態で https://[IPアドレス]/sample_log.txt はアクセス可能です。
しかし curl/openssl/se05x_getkey 系のコマンドは約30秒程度かかり、タイムアウト?してしまいます。
いずれのコマンドも正しく動作しません。

・約30秒かかる例

# time se05x_getkey 0xF0000100 refkey.pem "$AT_SE_PARAM"
App   :INFO :Running se05x_getkey
App   :INFO :Using PortName='/dev/i2c-6:0x48' (CLI)
failed to TimedWaitForLock().
failed to PeriodLocker_AcquireLock().
failed to create the period_locker.
 
real    0m30.046s
user    0m0.007s
sys     0m0.012s

・REST API 呼び出しで Segmentation fault 発生

# AUTH="Authorization: Bearer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# alias curl_rest='curl -sS -k -H "$AUTH" -w "\n{\"http_status\": %{http_code}}\n" '
# curl_rest https://127.0.0.1:58080/api/tokens
ssse-flw: EmbSe_Init(): Entry
failed to TimedWaitForLock().
failed to PeriodLocker_AcquireLock().
ssse-err: failed to PeriodLocker_Create().
ssse-flw: Control Command EMBSE_LOG_LEVEL; requested log level = 4
Segmentation fault

lighttpd プロセスを落とせば上記コマンドは正しく動作します。
または packages.txt で SE050 系のパッケージである se05x-tools/plug-and-trust-tools をインストールせず、
openssl をインストールして Web サーバーを起動すれば問題ありません。
※この場合、当然 se05x_getkey コマンドは使えませんが。

上記の現象はどのようなことが起きていると考えられますか?
また本構成のように SE050 使用環境において lighttpd+SSL を動作させつつ、
SE050 にアクセスするコマンドがタイムアウトせず、正しく動作するための回避方法を教えて頂けますか?

ファイル ファイルの説明
app.conf
main.sh
packages.txt
lighttpd.conf
コメント

at_shinya.koga

2025年8月5日 7時27分

アットマークテクノの古賀です。

takamura.eijiさん:
>==========
>製品型番:AG9130-C03D0
>Debian/ABOSバージョン:v3.21.3-at.14
>==========
>SE050 使用環境において Web サーバーで lighttpd+SSL 構成にすると
>curl/openssl/se05x_getkey 系のコマンドが約30秒程度かかり、タイムアウト?してしまいます。
>
>ABOSDE より A9E ->Shell New Project からプロジェクトを生成し、alpine として SWU を作成しました。
...
>プロジェクトの app/src 配下に以下を配置しました。
>main.sh: 起動スクリプト。lighttpd+SSL で起動して Web 直下に sample_log.txt を作成する。
>server.crt: 自己証明書で別途作成して配置。
>server.key: 秘密鍵で別途作成して配置。
>lighttpd.conf: lighttpd パッケージインストール時の初期設定ファイルから以下を追記したもの。

lighttpd が SSL で使用する秘密鍵は、コンテナ内に配置していらっしゃるという認識で合っているでしょうか?
もし、秘密鍵を SE050 に書き込んで使っていらしゃるのであれば、教えてください。

>コンテナ起動時に main.sh が呼ばれて lighttpd+SSL で起動します。
>
>この状態で https://[IPアドレス]/sample_log.txt はアクセス可能です。
>しかし curl/openssl/se05x_getkey 系のコマンドは約30秒程度かかり、タイムアウト?してしまいます。
>いずれのコマンドも正しく動作しません。
...
>lighttpd プロセスを落とせば上記コマンドは正しく動作します。
>または packages.txt で SE050 系のパッケージである se05x-tools/plug-and-trust-tools をインストールせず、
>openssl をインストールして Web サーバーを起動すれば問題ありません。
>※この場合、当然 se05x_getkey コマンドは使えませんが。
...
>また本構成のように SE050 使用環境において lighttpd+SSL を動作させつつ、
>SE050 にアクセスするコマンドがタイムアウトせず、正しく動作するための回避方法を教えて頂けますか?

lighthttpd 用の秘密鍵をコンテナ内に配置して使っていらっしゃる(SE050 に書き込んで使っていらっしゃるのではない)場合、app.conf にある以下の行をコメントアウトしてみてください:

add_args --env=OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
add_args --env=EX_SSS_BOOT_SSS_PORT="$AT_SE_PARAM"

>上記の現象はどのようなことが起きていると考えられますか?

上記環境変数を設定して OpenSSL API を使用するプロセスを実行すると、plug & trust の OpenSSL API のプラグインが有効となり、そのプロセスが OpenSSL の API を呼び出すたびに、SE050 のアクセスを排他制御するためのロックがかります。その影響によるものだと思われます。
SE050 に秘密鍵を格納し、SSL 相互認証などに利用しないプロセスの場合は、そのプロセスが SE050 をアクセスする必要はありませんから、上記の環境変数設定は不要です。これらの環境変数を設定しない場合は、plgu & trust のプラグインがロードされず、OpenSSL API だけで SSL 通信が行われます。

> lighttpd が SSL で使用する秘密鍵は、コンテナ内に配置していらっしゃるという認識で合っているでしょうか?
> もし、秘密鍵を SE050 に書き込んで使っていらしゃるのであれば、教えてください。

lighttpd が SSL で使用する秘密鍵は、コンテナ内に配置しておりました。

> lighthttpd 用の秘密鍵をコンテナ内に配置して使っていらっしゃる(SE050 に書き込んで使っていらっしゃるのではない)場合、app.conf にある以下の行をコメントアウトしてみてください:
>

> add_args --env=OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
> add_args --env=EX_SSS_BOOT_SSS_PORT="$AT_SE_PARAM"
> 

説明不足で大変申し訳ありません。
今回、ファイルの暗複合などで"se05x_getkey/se05x_setkey/se05x_reset -y/openssl(SE050)"の利用が大前提でして、
コメントアウトすると一部の機能が動かなくなってしまいましたので、コメントアウトはできないと思っております。

そこで改めての質問となるのですが、
コンテナアプリでは、マニュアル「6.12.6.」で紹介されているRestAPI実行(curl)や、
Webサーバの"Lighttpd"のSSL化で、特に必須では無くてもSE050を内部で利用しようとする動きをしてしまいます。
これを任意のプロセスにおいてSE050を利用しないようにする方法はありませんでしょうか?

また、
lighttpdがSSL使用する秘密鍵をSE050に書き込んで使えばそもそも本現象は発生しないのでしょうか?
もし、そうでしたら手順をご教示願えませんか?

at_shinya.koga

2025年8月6日 5時47分

アットマークテクノの古賀です。

takamura.eijiさん:
>>lighttpd が SSL で使用する秘密鍵は、コンテナ内に配置していらっしゃるという認識で合っているでしょうか?
>>もし、秘密鍵を SE050 に書き込んで使っていらしゃるのであれば、教えてください。
>
>lighttpd が SSL で使用する秘密鍵は、コンテナ内に配置しておりました。

了解しました。

>>lighthttpd 用の秘密鍵をコンテナ内に配置して使っていらっしゃる(SE050 に書き込んで使っていらっしゃるのではない)場合、app.conf にある以下の行をコメントアウトしてみてください:

add_args --env=OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
add_args --env=EX_SSS_BOOT_SSS_PORT="$AT_SE_PARAM"

>
>説明不足で大変申し訳ありません。
>今回、ファイルの暗複合などで"se05x_getkey/se05x_setkey/se05x_reset -y/openssl(SE050)"の利用が大前提でして、
>コメントアウトすると一部の機能が動かなくなってしまいましたので、コメントアウトはできないと思っております。

ファイルの暗複合処理は、どのように実行されるのでしょうか?
差し支えない範囲で、ユースケース(システムとしての振る舞い)を教えてくださいませ。
おそらく、lighthttpd が稼働しているコンテナ内で、lighthttpd または別のアクティビティによってファイルの暗複合を行う仕組みなのだと思いますが、実際どうなのかを教えて頂けますと幸いです。

>そこで改めての質問となるのですが、
>コンテナアプリでは、マニュアル「6.12.6.」で紹介されているRestAPI実行(curl)や、
>Webサーバの"Lighttpd"のSSL化で、特に必須では無くてもSE050を内部で利用しようとする動きをしてしまいます。
>これを任意のプロセスにおいてSE050を利用しないようにする方法はありませんでしょうか?

そのプロセスを実行する際に、SE050 を有効にする環境変数を消去すればよいです。
または、SE050 を使用するプロセスを起動する際に SE050 を有効にする環境変数を渡してやる、というのでもよいです。

> ファイルの暗複合処理は、どのように実行されるのでしょうか?
> 差し支えない範囲で、ユースケース(システムとしての振る舞い)を教えてくださいませ。
> おそらく、lighthttpd が稼働しているコンテナ内で、lighthttpd または別のアクティビティによってファイルの暗複合を行う仕組みなのだと思いますが、実際どうなのかを教えて頂けますと幸いです。

起動スクリプトからはC言語プログラム、各種スクリプト、Web(lighttpd+SSL)サーバーを起動し、それぞれ はcurl にて RestAPI を利用します。
それぞれの設定ファイルは、SE050 による暗号化状態で保持され、必要に応じて復号処理をして設定値を読み取ります(JC-STAR適合を見据えた対応)。
なお SE050 による暗号処理自体も各種スクリプトで行われます。

> >そこで改めての質問となるのですが、
> >コンテナアプリでは、マニュアル「6.12.6.」で紹介されているRestAPI実行(curl)や、
> >Webサーバの"Lighttpd"のSSL化で、特に必須では無くてもSE050を内部で利用しようとする動きをしてしまいます。
> >これを任意のプロセスにおいてSE050を利用しないようにする方法はありませんでしょうか?
>
> そのプロセスを実行する際に、SE050 を有効にする環境変数を消去すればよいです。
> または、SE050 を使用するプロセスを起動する際に SE050 を有効にする環境変数を渡してやる、というのでもよいです。

具体的には、例えばこんな感じでしょうか?
※curlをSE050を利用せずに通常のopensslで実行する場合

env -u EX_SSS_BOOT_SSS_PORT OPENSSL_CONF=/etc/ssl/openssl.cnf curl https://example.com

at_shinya.koga

2025年8月8日 5時51分

アットマークテクノの古賀です。

takamura.eijiさん:
>>ファイルの暗複合処理は、どのように実行されるのでしょうか?
>>差し支えない範囲で、ユースケース(システムとしての振る舞い)を教えてくださいませ。
>>おそらく、lighthttpd が稼働しているコンテナ内で、lighthttpd または別のアクティビティによってファイルの暗複合を行う仕組みなのだと思いますが、実際どうなのかを教えて頂けますと幸いです。
>
>起動スクリプトからはC言語プログラム、各種スクリプト、Web(lighttpd+SSL)サーバーを起動し、それぞれ はcurl にて RestAPI を利用します。
>それぞれの設定ファイルは、SE050 による暗号化状態で保持され、必要に応じて復号処理をして設定値を読み取ります(JC-STAR適合を見据えた対応)。
>なお SE050 による暗号処理自体も各種スクリプトで行われます。

了解しました。設定ファイルの暗復号処理機能を単体のユーティリティプログラムとして切り出し、そのプログラムを、C 言語プログラムや各種スクリプトから実行する仕組みにする、という構造にすれば、SE050 をアクセスするプログラムを起動する際に環境変数を渡す、というやり方も使えるのかなと思います。

>>>そこで改めての質問となるのですが、
>>>コンテナアプリでは、マニュアル「6.12.6.」で紹介されているRestAPI実行(curl)や、
>>>Webサーバの"Lighttpd"のSSL化で、特に必須では無くてもSE050を内部で利用しようとする動きをしてしまいます。
>>>これを任意のプロセスにおいてSE050を利用しないようにする方法はありませんでしょうか?
>>
>>そのプロセスを実行する際に、SE050 を有効にする環境変数を消去すればよいです。
>>または、SE050 を使用するプロセスを起動する際に SE050 を有効にする環境変数を渡してやる、というのでもよいです。
>
>具体的には、例えばこんな感じでしょうか?
>※curlをSE050を利用せずに通常のopensslで実行する場合

env -u EX_SSS_BOOT_SSS_PORT OPENSSL_CONF=/etc/ssl/openssl.cnf curl https://example.com

はい、それでよいと思います。