ssl - 具有本地 IP 的设备的自签名证书

标签 ssl asp.net-core x509certificate tls1.2 pfx

场景:

  • 我们有一个类似于 WiFi 路由器的设备,它公开了 UI 和 API
  • 该设备将在我们无法控制的任何 LAN 上运行,就像 WiFi 路由器在任何房屋上运行一样。
  • 设备不属于任何域,可通过浏览器通过其 IP 地址(即 192.168.1.100)访问。
  • 协议(protocol)应为 HTTPS
  • 使用的软件是Windows上的.net Core/Kestrel
  • 目前,我们在所有浏览器中都会发出警告,告知该设备的证书无效。
  • 约束:该设备应可由任何机器(台式机/平板电脑)访问,并且不能在客户端机器上安装或配置任何东西。

问题是: 删除警告的最佳方法是什么?我们了解到,私有(private)/本地 IP 不能有常规证书。

自签名证书似乎可以工作几天,然后错误再次出现。

Local environment

最佳答案

无法为 IP 地址颁发 SSL 证书;您必须有一个您为其创建证书的实际名称。为了获得这样的名称,您需要一个 DNS。由于您无权访问该本地网络的内部 DNS,因此您必须为此使用公共(public) DNS 服务器。

这假设该网络中的设备确实可以访问互联网。如果他们不这样做,那你就完全倒霉了。

如果可以访问互联网,那么您只需将公共(public)(子)域指向您的本地 IP 地址即可。基本上,为您拥有的域配置 DNS,以便在域或其子域之一上有一个 A 条目,指向您的本地 IP 地址 192.168.1.100

这样,您就可以将该公共(public)域传达给其他人,当他们尝试解析该域时,他们将访问 DNS,这将提供本地 IP 地址。因此,该网络内的设备可以访问您的设备并进行访问。由于他们随后通过该域访问它,因此通常会接受该确切域的证书。

从理论上讲,这很有效。在实践中,这可能有点复杂或昂贵。服务器证书过期,因此您必须将证书(安全地!)包含在您的设备中,并提供一些方法在它过期时最终更新它。免费证书(例如来自 letsencrypt 的证书)将在几周内过期,但您可以花钱购买过期较慢的证书。

但到头来,还是会有些痛苦。但不是因为域名,而是因为证书——至少如果你想要一个自动信任的证书。否则,你会回到起点。

关于ssl - 具有本地 IP 的设备的自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51177935/

相关文章:

ssl - 如何在 centos 7 上的 apache 2.4 上禁用密码 CBC

c++ - 如何在 C++ 项目中使用 C gnutls API

ssl - 创建没有 UI 密码的签名证书

c# - AddAuthentication + RequireAuthenticatedUser = 多余?

java - 实例化类的正确方法,以便我能够验证证书中的路径链

web-services - 使用 CodeIgniter API 进行身份验证

c# - buildOptions 和 preserveCompilationContext 有什么用?

AngularJS:UI-Router 解决路由 hash-bang 不起作用

c# - 从 Azure KeyVault 加载 X509Certificate

certificate - 检查证书是否为通配符证书