在Ubuntu中尝试将dotnet Web应用程序作为服务运行时出现服务器证书错误

xbp102n0  于 2023-11-17  发布在  其他
关注(0)|答案(1)|浏览(158)

我正在以root身份运行Ubuntu 22.04容器。
在Windows机器上创建了一个.net 8.0 web应用程序API,我将app.urls设置为容器IP

app.Urls.Add("https://10.0.0.242:7000");

字符串
使用便携式的发布配置目标运行时发布了应用程序,
已将发布的文件夹复制到Ubuntu容器。
运行nginx代理管理器docker容器。使用我们的域名设置代理主机,使用Ubuntu机器的IP地址和端口7000将方案设置为https。启用阻止常见漏洞和WebSocket支持。获取SSL letsencrypt证书启用强制SSL和HTTP/2支持。
我去ubuntu机器并运行dotnet FRTOOLS.WebhookListener.dll应用程序运行,我收到POST和GET请求到我们的代理域url预期。
所以现在我想运行应用程序作为一个服务,所以如果事情重新启动或什么。我创建了一个.service文件

[Unit]
Description=Web API App Listening for Channel Advisor Webhook responses on Linux

[Service]
WorkingDirectory=/usr/www/data/publish
ExecStart=/usr/bin/dotnet /usr/www/data/publish/FRTOOLS.WebhookListener.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-webapi
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target


做了

systemctl start webhooklistener


我的日志显示错误Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date. To generate a developer certificate run 'dotnet dev-certs https'.
因此,故障排除,与dotnet证书信任和每一个人的堆栈溢出建议的错误没有修复。
chmod chown这文件夹以便www-data有权限.仍然不工作?
我不明白为什么应用程序将为我工作时,运行应用程序在命令行与dotnet,但不是作为一个服务?

lndjwyie

lndjwyie1#

这就是我最终解决问题的方法。我不确定这种方法是否是公认的标准,但它确实有效。
一旦我意识到在dotnet web应用程序的构建过程中实际发生了什么,根据这里的文档https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-8.0#default-configuration,我现在明白了,我可以在appsettings.json文件中添加.pem服务器证书和kestrel服务器设置的url设置。

"Kestrel": {
   "Certificates": {
     "Default": {
        "Path": "/usr/www/data/listener/publish/certificate/fullchain.pem",
        "KeyPath": "/usr/www/data/listener/publish/certificate/privkey.pem"
     }
   },
   "Endpoints": {
       "Https": {
          "Url": "https://10.0.0.242:7000"
       }
   }
},

字符串
在nginx代理管理器中创建LetsEncrypt证书后,我将解压缩的文件放在我的Web Apps发布项目文件夹中,因此当通过sftp将文件传输到Ubuntu机器时,它会带来.pem证书。
my .pem的路径是我的Web应用程序在Ubuntu计算机中存储的文件夹位置。
这里的stackoverflow问题
Using appsettings.json to configure Kestrel listen port Dotnet core 2 preview 2
部分引导我找到答案。
获取证书并将它们放在正确的位置让我感到困惑。使用nginx代理管理器并能够导出证书使这个过程对我来说变得更加容易,我不需要使用certbot然后使用openssl来创建一个.pfx文件,然后将这些文件从一个容器复制到另一个容器。

但是有一个警告,这个证书没有密码保护!另一个未来的问题是,当我需要在90天内更新证书时,我们将看到这种方法所涉及的困难。

相关问题