Python本地HTTPS服务器的SSL异常

1 投票
2 回答
607 浏览
提问于 2025-04-18 01:24

我在使用Windows 7和Python 2.7。我创建了一个本地的HTTPS服务器,并将重定向的URL设置为服务器的IP地址。我使用openssl生成了HTTPS的证书文件。一切都很好,但是在重定向到本地HTTPS服务器时出现了SSL异常。因为这个服务器是本地创建的,每次我的应用程序启动时都会生成,所以我们不能购买SSL证书,因为重定向的URL是系统的IP地址。我使用了这个链接来创建本地服务器。那么,如何避免这个SSL异常呢?

在这里输入图片描述

2 个回答

0

操作服务器的人需要一个有效的证书,这个证书要和访问网站时使用的主机名匹配。

如果这个应用程序只在本地机器上访问,可以直接用127.0.0.1来访问,而不需要使用外部IP,也不需要HTTPS。因为数据根本没有离开这台机器,使用HTTPS就没有意义了。(在这种情况下,你可能还想把web服务器绑定到127.0.0.1,这样其他人就无法访问这个网站了)。

如果应用程序还会被网络上其他机器访问,并且你想使用SSL,那么运行这个应用程序的人需要一个和URL中的主机名匹配的证书。你不能为私有IP(比如192.168.1.1或10.2.3.4)获取证书,但如果是公共IP,你可能能为它获取证书。

不过,更合理的做法是把某个主机名(如果你的证书颁发机构允许,可以用DynDNS,或者用运行应用程序的人的域名的子域名)指向这个IP。例如,一个叫做Example的公司拥有example.com,可以使用webapp.example.com,把它指向他们的服务器,并为此获取证书。运行服务器的人需要部署这个证书,而你的应用程序也需要设计成能够接受这个证书。 每个客户的网站都需要一个证书。 如果你想让它在普通浏览器上正常工作,没有其他安全的办法。

你可以通过提供自动化的工作流程来简化申请证书的过程,甚至为你的客户创建一个类似dyndns的服务,让他们可以注册他们的名字.yourservice.com,指向他们想要的IP,并从你这里获取主机的证书。(这需要他们非常信任你,有点反模式,但可能是最不糟糕的解决方案。)你仍然需要确保每个客户都有自己的证书。最重要的是,千万不要试图为这样的域名获取一个通配符证书,并把证书和私钥一起分发给应用程序。任何拥有你应用程序副本的人都能攻击这些“安全”的连接。更重要的是,一旦证书颁发机构发现,你的证书会被撤销,这会导致访问网站时出现非常严重的警告,并且没有办法绕过这个警告。而且这可能会让你因为违反与证书颁发机构的协议而陷入麻烦,因为你没有保护好私钥。

另外一个选择是,在第一次启动时生成一个自签名证书,并输出指纹。 不要对所有安装使用相同的硬编码证书,虽然这样方便,但分发给所有客户的私钥就不再是私密的了。这个证书会产生你看到的警告。你需要把这个证书或者这个网站的例外添加到访问应用程序的浏览器中。只要你验证指纹,这就是安全的——只是工作量更大。根据用户使用的浏览器,可能会有一些简单的方法来将这样的证书快速分发到多台机器上。

0

你可以尝试以下方法:

  • 使用类似 dyndns 的服务(或者一个子域名?)并购买一个 SSL 证书
  • 把你的 SSL 证书安装到浏览器里,作为一个可信的证书

撰写回答