我正在使用 HAProxy 将请求转发到 Azure IoT 中心,但遇到来自 IoT 中心的问题 401 未经授权错误。错误响应包括 iothuberrorcode 作为 IoTHubNotFound。我能够从运行 HAProxy 的服务器成功 ping 并执行 nslookup,只有使用 haproxy 时才会出现错误。
这是我的 haproxy.cfg:
frontend iothub_frontend
bind *:443
mode tcp
default_backend iothub_backend
backend iothub_backend
mode tcp
server iothub <<iothub-name>>.azure-devices.net:443
http-request set-header Host <<iothub-name>>.azure-devices.net
要解决连接到 Azure IoT 中心时 HAProxy 请求中的 401 Unauthorized 错误,请配置 SSL 终止并将证书绑定到端口 443,如下所示:
bind *:443 ssl crt /etc/ssl/mydomain/mydomain.pem alpn h2,http/1.1
请参阅本指南,了解有关在 HAProxy 中配置 SSL 证书的详细说明。
添加 SSL/TLS 参数以确保使用安全协议。包括最低 SSL 版本指令,如下所示:
bind *:443 ssl crt /etc/ssl/mydomain/mydomain.pem alpn h2,http/1.1 ssl-min-ver TLSv1.2
对于协议版本,请使用
TLSv1.2
表示 1.2
,使用 TLSv1.1
表示 1.1
以下是
haproxy.cfg
配置示例:
frontend iothub_frontend
bind *:443 ssl crt /etc/haproxy/cert.pem configured
mode http
option httplog
option forwardfor
default_backend iothub_backend
backend iothub_backend
mode http
server iothub <<iothub-name>>.azure-devices.net:443 ssl verify none
http-request set-header Host <<iothub-name>>.azure-devices.net
http-request set-header Authorization "SharedAccessSignature sr=<<iothub-name>>.azure-devices.net&sig=<<signature>>&se=<<expiry>>&skn=iothubowner"
要验证与 Azure IoT 中心的连接,请运行以下命令:
openssl s_client -connect <<iothub-name>>.azure-devices.net:443
输出: