我正在开发一个 .NET 6 应用程序,它允许用户配置与外部 LDAP 的集成(可能使用 SSL)。 我正在尝试设置一个容器映像来分发应用程序,但在允许用户在不使用卷且没有根权限的情况下将自定义证书注入正在运行的容器中时遇到了麻烦。
到目前为止,我能够使用卷和 root 权限达到预期结果:
/usr/local/share/ca-certificates
update-ca-certificates
是否可以允许用户注入/提供自定义证书而不使用卷(可能是环境变量?)并删除容器中的根权限?
我也愿意接受可能意味着在 .NET 应用程序上进行代码开发的解决方案,但根据我的理解,.NET LDAP 实现只是让底层本机库处理证书验证。 来源
我无需修改任何应用程序代码即可实现我想要的目标:
$CUSTOM_CERT_1
/app/certs/custom_cert_1.cer
c_rehash /app/certs
,因为 libldap 需要使用自定义证书LDAPTLS_CACERTDIR=/app/certs
,以便选取自定义证书进行 LDAPS 证书验证这样就不需要卷,也不需要 root 权限。
最终
startup.sh
脚本示例:
#!/bin/sh
mkdir -p /app/certs
found_var=false
for i in $(seq 1 9); do
var_name="CUSTOM_CERT_$i"
eval var_value=\$$var_name
if [ ! -z "$var_value" ]; then
found_var=true
echo "$var_value" > /app/certs/custom_cert_$i.cer
fi
done
if [ "$found_var" = true ]; then
c_rehash /app/certs
export LDAPTLS_CACERTDIR=/app/certs
fi
dotnet MyApp.dll