7

我只知道“s”代表“安全”,用户不应该在只使用 http 的网站上输入关键信息。但是我真的很想知道这两个协议对我的编程有什么影响,例如:

  • 某些网站如何获得“https”而有些却没有(或者他们如何打开和关闭此功能,我不知道)。这是否意味着我必须在某个地方注册它?

  • 我心想,http中的通信没有加密,而https中可能会进行一些加密,这是正确的吗?

  • 而且由于加密(如果有)过程是由浏览器完成的,因此,我的服务器端代码与“http”或“https”无关,对吗?

  • 有没有办法强制用户只使用 https?

4

2 回答 2

8
  • 使用 HTTPS 协议的网站使用由受信任的第三方(或“证书颁发机构”)颁发的证书,其中包含一个公钥(请参阅:公钥基础设施)。公钥与私钥配对,用私钥加密的信息只能用公钥解密。这用于确认服务器是私钥的持有者(因此是证书颁发机构认证的实体)。要使用 HTTPS 协议,您必须生成或购买证书。由于各种原因,购买证书而不是生成证书更为常见。

  • HTTPS 通信是加密的。与证书关联的密钥不进行加密,而是浏览器和服务器使用诸如 Diffie-Hellman Exchange 之类的方案来生成用于加密通信的密钥。这很重要,因为任何拥有公钥的人都可以解密使用私钥加密的内容。

  • 浏览器发送的信息由浏览器加密,由服务器解密。您的网络服务器软件将解密信息;接收到的信息看起来与标准 HTTP 流量没有什么不同。

  • 是的,您可以强制使用 HTTPS。您可以通过您的服务器软件(例如RewriteRule,在 Apache 中,通过RewriteCond检查 HTTPS)或通过 HSTS(这涉及发送特定标头)来执行此操作。如果您在支持 HSTS 的浏览器中发送 HSTS 标头,浏览器将自动从 HTTP 重定向到 HTTPS(请参阅:HTTP Strict Transport Security)。

于 2013-02-16T17:18:19.253 回答
4

您需要在网络服务器上安装 SSL 证书才能启用 HTTPS。这将允许在客户端浏览器和服务器之间建立加密连接,并且所有 HTTP 流量都将被加密。此证书由受信任的机构颁发。您还可以生成证书用于测试目的,但是当客户端浏览器导航到该网站时,它会发出警告,指出该证书不是由受信任的机构颁发的。

您可以强制使用 HTTPS,方法是将您的网络服务器配置为自动将所有 HTTP 请求重定向到相应的 HTTPS 端点。

你可以查一下SSL/TLS

于 2013-02-16T17:16:54.950 回答