c# - 在我的 Rpi 上加载资源时出现 SSL 问题
问题描述
我在我的 Raspbian 上使用 Asp.Net Core。
我使用 NGINX 作为我的网络服务器
我试图加载资源并连接到我的 web api 控制器
问题是我的 uri 正在从 http 更改为 https。
由于我想在我的网络上的其他地方浏览这个站点,所以我能实现的目标非常有限。如果我在 Pi 本身并使用 localhost 或 127.0.0.1 ,那么一切正常。如果我使用 dhcp 地址访问它,它会失败。
它之所以有效,是因为我使用的是 Open SSL,但仅在本地级别。
这是我的 NGINX:
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
listen 443;
ssl on;
ssl_certificate /home/pi/web/localhost.crt;
ssl_certificate_key /home/pi/web/localhost.key;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location /FindMotion/ {
proxy_pass http://localhost:5000/;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-Forwarded-Path /FindMotion;
}
}
这是我的 Javascript:
var timer;
function RenderImage() {
try {
$.ajax({
url: "/Connection/ImageData",
success: function(response) {
var image = new Image();
image.src = 'data:image/png;base64,' +response;
document.body.appendChild(image);
timer = setTimeout(function() { RenderImage(); }, 10000);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
$("#divImage").html("ERROR: " + errorThrown);
timer = setTimeout(function() { RenderImage(); }, 10000);
}
});
} catch (err) {
$("#divImage").html(err);
timer = setTimeout(function() { RenderImage(); }, 10000);
}
}
RenderImage();
这是我的控制器:
[ HttpGet ]
[ Route( "Connection/ImageData" ) ]
public string GetImageData()
{
var img = new Bitmap( "20190521141101456.jpg" );
using ( MemoryStream mStream = new MemoryStream() )
{
img.Save( mStream, img.RawFormat );
var bytes = mStream.ToArray();
var data = Convert.ToBase64String( bytes );
return data;
}
}
}
浏览控制台的错误是: https ://192.168.0.12/Connection/ImageData 404 (Not Found)
我认为这不能正常工作是正确的吗,因为 Open SSL 不够用?
如果是这样,我是否也正确地认为我必须获得“适当的”SSL,并且我需要一个域名?
如果是这种情况,对于我销售/生产的每种产品,我都需要一个域和静态地址吗?
我完全错了还是对了?请问我有什么选择?在过去的几天里,我尝试了很多东西,但没有任何效果。
我非常需要建议。
谢谢
解决方案
我认为这更有可能是 nginx 配置问题。404 not found 表示 403 上没有任何内容。并不是说 TSL 版本或 SSL 版本不适合您。您可能会从 nginx 收到 400(错误请求)或 495(SSL 错误)。
像这样试试。对此我不确定。但我从未见过在同一块中同时配置 http 和 https。现在我不是远离它的系统管理员,但我自己的服务器设置得更像这样。我还在其中放了一行 ssl_protocols 来指定基本上所有这些。也许这有帮助。但正如我所说,当您返回 404 时,我认为这不会是 TLS 或 SSL 问题。
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://192.168.0.12$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate /home/pi/web/localhost.crt;
ssl_certificate_key /home/pi/web/localhost.key;
ssl_ciphers HIGH:!aNULL:!MD5;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location /FindMotion/ {
proxy_pass http://localhost:5000/;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-Forwarded-Path /FindMotion;
}
}
}
推荐阅读
- apache - 所有 conf 文件的 XAMPP 权限被拒绝
- android - 连接模块无法使用 Nativescript
- wso2 - WSO2 EI 和每笔交易的延迟
- duplicates - 使用 Applescript 将别名复制/复制到 Mac 中的“应用程序”文件夹
- reactjs - 这个 setState 如何从函数中设置一个值?
- python-3.x - 如何在 Tensorflow 中拆分 LSTM 的训练数据和测试数据以进行时间序列预测
- python - python - 从 jsonschema 构建棉花糖架构
- javascript - AngularJS:ngIf在具有不同属性的数组数组中
- unix - Unix sed 从起始模式读取到文件结尾
- javascript - 无法使用 MyChart 功能