我刚刚知道"s"代表"Secure",用户不应该在只使用http的网站上输入重要信息。但我真的想知道这两种协议如何影响我的编程,例如:
为什么有些网站有"https"而有些没有(或者它们如何开启和关闭此功能,我不知道)。这是否意味着我必须在某个地方注册?
我认为http通信不加密,而https可能会进行一些加密,这是正确的吗?
由于加密(如果有)过程由浏览器完成,因此我的服务器端代码与"http"或"https"无关,这是正确的吗?
有办法强制用户仅使用https吗?
我刚刚知道"s"代表"Secure",用户不应该在只使用http的网站上输入重要信息。但我真的想知道这两种协议如何影响我的编程,例如:
为什么有些网站有"https"而有些没有(或者它们如何开启和关闭此功能,我不知道)。这是否意味着我必须在某个地方注册?
我认为http通信不加密,而https可能会进行一些加密,这是正确的吗?
由于加密(如果有)过程由浏览器完成,因此我的服务器端代码与"http"或"https"无关,这是正确的吗?
有办法强制用户仅使用https吗?
使用HTTPS协议的网站使用由可信第三方(或“证书颁发机构”)颁发的包含公钥的证书(参见:公钥基础设施)。公钥与私钥配对,使用私钥加密的信息只能使用公钥解密。这用于确认服务器是私钥的持有者(因此是证书颁发机构认证的实体)。要使用HTTPS协议,您必须生成或购买证书。出于各种原因,购买证书比生成证书更为常见。
HTTPS通信是加密的。与证书相关联的密钥不进行加密,而是浏览器和服务器使用诸如Diffie-Hellman Exchange之类的方案来生成用于加密通信的密钥。这很重要,因为任何拥有公钥的人都可以解密使用私钥加密的内容。
从浏览器发送的信息由浏览器加密,由服务器解密。您的Web服务器软件将解密信息;接收到的信息与标准HTTP流量没有区别。
是的,您可以强制使用HTTPS。您可以通过服务器软件(例如,在Apache中使用RewriteRule
,并使用RewriteCond
检查HTTPS)或通过HSTS来实现。如果在支持HSTS的浏览器中发送HSTS标头,则浏览器将自动从HTTP重定向到HTTPS(参见:HTTP Strict Transport Security)。
为了启用HTTPS,您需要在Web服务器上安装SSL证书。这将允许客户端浏览器和服务器之间建立加密连接,并且所有HTTP流量都将被加密。该证书由受信任的机构颁发。您也可以生成用于测试目的的证书,但是当客户端浏览器导航到网站时,它会发出警告,指出此证书未经受信任的机构颁发。
通过配置Web服务器自动将所有HTTP请求重定向到相应的HTTPS端点,可以强制使用HTTPS。
您可以查找SSL/TLS
。