场景:
问题是: 删除警告的最佳方法是什么?我们了解到,对于私有/本地IP,没有常规证书。
自签名证书似乎可以工作几天,然后错误再次出现。
答案 0 :(得分:4)
无法为IP地址颁发SSL证书;您必须具有为其创建证书的实际名称。为了获得这样的名称,您需要一个DNS。由于您无权访问该本地网络的内部DNS,因此必须为此使用公共DNS服务器。
这假定该网络中的设备确实可以访问Internet。如果他们不这样做,那么您就完全不走运了。
如果可以访问Internet,则只需将公共(子)域指向您的本地IP地址即可。基本上,为您拥有的域配置DNS,以使该域或其子域之一上有一个A条目,指向您的本地IP地址192.168.1.100
。
这样,您可以将该公共域传达给其他人,并且当他们尝试解析该域时,他们将点击DNS,该DNS将提供本地IP地址。这样,该网络中的设备便可以访问您的设备并对其进行访问。由于他们随后会通过该域进行访问,因此通常会接受该确切域的证书。
理论上,这很好。实际上,这可能有点复杂或昂贵。服务器证书已过期,因此您必须将证书(安全!)包含在设备中,并且还提供了一些在证书到期时最终对其进行更新的方法。免费的证书(例如来自letencrypt的证书)将在几周内过期,但是金钱可以为您购买过期较慢的证书。
但是最终,它仍然会有些痛苦。但这不是因为域名,而是因为证书-至少在您想要自动信任的证书的情况下。否则,您将重新开始。
答案 1 :(得分:0)
所以如果我理解正确,没有互联网访问,没有 访问内部 DNS,没有办法允许客户端(在本地 网络)访问一个 REST api 监听“某些”设备中的 通过 HTTPS 的本地网络。对吗?
这是不对的。您可以使用通配符证书,例如生成openssl 并通过 TLS 加密安全通信。只是签名不可信,所以现代浏览器会显示“不安全”的大警告。那是非常错误的。与普通的 http 相比,它更安全,因为它不确定您是否正在与您期望的服务器通信,但您正在安全地加密。
在普通的 http 中,只需监听飞过的数据包就足够了。使用 https,您需要伪装成服务器并颁发证书和正确的端点。因此需要付出更大的努力,并且对于本地网络中的大多数用例而言,安全级别已足够。
#!/bin/bash
CONFIG="
HOME = /var/lib/cert
[ req ]
default_bits = 4096
default_md = sha256
distinguished_name = req_distinguished_name
prompt = no
x509_extensions = v3_req
[ req_distinguished_name ]
countryName= YourCountryCode
stateOrProvinceName= YourState
localityName= YourTown
organizationName= YourCompany
organizationalUnitName= YourUnit
commonName= *
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = email:whatever@localhost
"
openssl genrsa -out /var/usr/cert/name.key 4096
openssl req -x509 -new -nodes -key /var/usr/cert/name.key \
-config <(echo "$CONFIG") -days 365 \
-out /var/usr/cert/name.crt
将其应用于您的服务。
对于浏览器,它会显示这个丑陋的大消息 对于连接到服务的应用,您通常需要设置一个标志,禁用签名检查,例如:
(谷歌帮助你的申请)