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

时间:2016-06-30 14:03:18

标签: ssl cross-domain

我有一个不寻常的用例:

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

附带问题:由于设备本地连接到PC,因此加密非常无用:是否存在允许与特定URL进行不安全连接的http标头? (比如跨域的CORS)

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

编辑:似乎Plex遇到了类似的问题,并按照http://ecl.moyl.com/Home/Stats中描述的方式解决了问题。这对我来说太大了。

2 个答案:

答案 0 :(得分:6)

  

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

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

例如,颁发给192.168.0.1的证书在理论上在任何上下文中都是有效的,受信任的CA不应该允许这样做

Plex通过动态DNS和通配符证书解决了这个问题。使用解析为专用IP

的设备的名称(而不是IP)完成连接
  

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

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

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

答案 1 :(得分:1)

不能为保留的IP地址(RFC 1918和RFC 4193范围)/私有IP地址(IPv4,IPv6),内部服务器名称的Intranet,具有非公共域名的本地服务器名称颁发SSL证书后缀。

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

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

  1. 您需要安装OpenSSL。 例如,在Ubuntu上,您可以通过以下方式安装:sudo apt-get install openssl (它可能已经安装。键入“ openssl版本”以了解信息) 对于Windows,您可以尝试以下操作:https://slproweb.com/products/Win32OpenSSL.html

  2. 一旦安装了OpenSSL,请在控制台(LINUX)或cmd提示符(WINDOWS)上输入“ openssl”,转到OpenSSL提示符。

    $ openssl

    OpenSSL>

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

i)创建一个名为mydomain.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)的端口号。