保护私有IP地址(https证书)

问题描述 投票:0回答:2

我有一个不寻常的用例:

  • 互联网上的 Web 服务器通过 HTTPS 提供页面,
  • 在这些网页内,有对本地连接设备(IP over USB)的 XMLHttpRequest 调用
    • 设备支持HTTP和HTTPS,
    • 可通过
      http(s)://192.168.0.1
    • 访问该设备
  • 由于 https 页面中的内容不安全,http 调用失败,
  • https 调用失败,因为证书不受信任(自签名),

附带问题:由于设备本地连接到 PC,因此加密几乎没有用:是否存在允许不安全连接到特定 URL 的 http 标头? (就像跨域的 CORS)

主要问题:私有IP地址是否可以获得证书?

编辑:Plex 似乎也有类似的问题,并按照此博客中描述的方式解决了它。这对我来说太大了。

ssl cross-domain
2个回答
13
投票

是否可以获得私有IP地址的证书?

证书可以绑定到 IP 地址(请参阅this)。您可以向私有地址颁发自签名证书,但受信任的 CA 不会向私有地址颁发证书,因为它无法验证其身份。

例如,颁发给

192.168.0.1
的证书理论上在任何情况下都是有效的,而受信任的 CA 不应允许这样做。

Plex 通过动态 DNS 和通配符证书解决了该问题。连接是使用解析为私有 IP 的设备名称(而不是 IP)完成的。

是否存在允许与特定 URL 进行不安全连接的 http 标头? (就像跨域的 CORS)

不,它不存在。浏览器会阻止您的 XHR 连接,因为它们是从 HTTPS 页面发起的 HTTP 连接(混合内容警告)。理论上,攻击者可以读取或修改不安全的内容,即使父页面是通过 HTTPs 提供的,因此这是正常的,建议浏览器向用户发出警告。

要修复混合内容和 https 错误,您可以通过 HTTPS 和自签名证书提供内容,并请求用户在浏览器中导入您的根 CA。


8
投票

保留 IP 地址(RFC 1918 和 RFC 4193 范围)/私有 IP 地址(IPv4、IPv6)、内联网内部服务器名称、带有非公共域名后缀的本地服务器名称无法颁发 SSL 证书。

但是,您可以使用“自签名”证书。创建方法如下:

为私有IP创建自签名证书 (示例https://192.168.0.1):

  1. 您需要安装 OpenSSL。 例如,在 Ubuntu 上,您可以通过以下方式安装它:

    sudo apt-get install openssl
    (它可能已经安装。输入“openssl version”即可找到) 对于 Windows,您可以尝试以下操作:https://slproweb.com/products/Win32OpenSSL.html

  2. 安装 OpenSSL 后,通过在控制台 (LINUX) 或 cmd 提示符 (WINDOWS) 上输入“openssl”进入 OpenSSL 提示符。

    $openssl

    OpenSSL>

  3. 现在执行以下步骤来创建:私钥、证书请求、自签名证书,并将其全部放在一起,使用以下命令:

i) 创建名为 mydomain.key 的 KEY:

OpenSSL> genrsa -out mydomain.key 2048

ii) 使用密钥创建名为 mydomain.csr 的证书请求 您可以接受默认选项,或指定您自己的信息:

OpenSSL> req -new -key mydomain.key -out mydomain.csr

iii) 使用上述内容创建证书:

OpenSSL> x509 -req -days 1825 -in mydomain.csr -signkey mydomain.key -out mydomain.crt

iv) 将以上所有内容创建 PEM 证书: 退出 OpenSSL (OpenSSL> q) 并转到证书位置并执行以下操作:

$ sudo cat mydomain.key mydomain.crt >> mylabs.com.pem

mylabs.com.pem 是您的自签名证书。如果您的服务器支持 https,您可以在类似 https://192.168.0.1 的请求中使用它。记得检查 https(443) 的端口号。

© www.soinside.com 2019 - 2024. All rights reserved.