Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于https/SecureSocket层连接,PHP开发人员需要了解什么?_Php_Security_Ssl_Https - Fatal编程技术网

关于https/SecureSocket层连接,PHP开发人员需要了解什么?

关于https/SecureSocket层连接,PHP开发人员需要了解什么?,php,security,ssl,https,Php,Security,Ssl,Https,我几乎不知道https连接的方式和原因。显然,当我传输安全数据(如密码或信用卡信息)时,https是一个关键工具。但是我需要知道什么呢?当开发人员在他们的项目中实现它时,您看到的最常见的错误是什么?有时候https只是个坏主意吗?谢谢 确保在HTTPS页面上时,页面上的所有元素都来自HTTPS地址。这意味着元素应该具有相对路径(例如“/images/banner.jpg”),以便继承协议,或者您需要在每个页面上进行检查以找到协议,并将其用于所有元素 注意:这包括所有外部资源(如谷歌分析javas

我几乎不知道https连接的方式和原因。显然,当我传输安全数据(如密码或信用卡信息)时,https是一个关键工具。但是我需要知道什么呢?当开发人员在他们的项目中实现它时,您看到的最常见的错误是什么?有时候https只是个坏主意吗?谢谢

确保在HTTPS页面上时,页面上的所有元素都来自HTTPS地址。这意味着元素应该具有相对路径(例如“/images/banner.jpg”),以便继承协议,或者您需要在每个页面上进行检查以找到协议,并将其用于所有元素

注意:这包括所有外部资源(如谷歌分析javascript文件)

我能想到的唯一不利的一面是,它增加了浏览器和服务器的处理时间(几乎可以忽略不计)。我建议只加密需要加密的传输。

我建议在数据库中存储任何用户数据并进行通信时,使用https。即使用户数据是平凡的,也要考虑这一要求,因为即使是许多平凡的细节也被用户用来在其他网站上识别自己。想想你银行问你的所有随机安全问题(比如你住的是哪条街?)这可以很容易地从地址字段中获取。在这种情况下,数据并不是您所考虑的密码,但也可能是这样。此外,您永远无法预测哪些用户数据将用于其他地方的安全问题。你也可以期待,在普通网络用户(比如你的祖母)的智慧下,这些信息可能会在其他地方构成该用户密码的一部分

如果使用https,则为一个指针

如果用户输入 它们将自动重定向到 (个人恼怒)


然而,如果你只是在做一个普通的html网页,那基本上就是从服务器到用户的单向信息传输,不用担心

我想说,在使用启用SSL的站点时,最常见的错误是

  • 该站点错误地将用户从页面重定向到http作为https
  • 该站点在必要时不会自动切换到https
  • https页面上的图像和其他资产正在通过http加载,这将从浏览器触发安全警报。确保所有资产都使用指定https的完全限定URI
  • 安全证书仅适用于一个子域(如www),但您的站点实际使用多个子域。如果需要,请确保获得通配符证书

  • HTTPS或安全套接字层(SSL)证书是为站点提供的,通常由证书颁发机构(CA)签署,CA实际上是一个可信任的第三方,它可以验证站点的一些基本详细信息,并对其进行认证以供在浏览器中使用。如果您的浏览器信任CA,则它信任由该CA签名的任何证书(这称为信任链)

    每个HTTP(或HTTPS)请求由两部分组成:一个请求和一个响应。当您通过HTTPS请求某些内容时,实际上会在后台发生一些事情:

    • 客户端(浏览器)进行“握手”,请求服务器的公钥和标识。
      • 此时,浏览器可以检查有效性(站点名称是否匹配?日期范围是否当前?是否由其信任的CA签名?)。它甚至可以联系CA并确保证书有效
    • 客户端创建一个新的预主密钥,该密钥使用服务器的公钥加密(因此只有服务器可以解密)并发送到服务器
    • 服务器和客户端都使用此预主密钥生成主密钥,然后用于为实际数据交换创建对称会话密钥
    • 双方都发出信息说他们已经握手完毕
    • 然后服务器正常处理请求,然后使用会话密钥加密响应
    如果连接保持打开状态,则将为每个连接使用相同的对称密钥

    如果建立了一个新的连接,并且双方仍然拥有主密钥,则可以通过“简化握手”生成新的会话密钥。通常情况下,浏览器将存储主机密直到其关闭,而服务器将存储它几分钟或几个小时(取决于配置)

    有关会话长度的更多信息,请参见

    证书和主机名

    证书被分配了一个公共名称(CN),对于HTTPS,它是域名。CN必须精确匹配,例如,CN为“example.com”的证书将与域“www.example.com”不匹配,用户将在其浏览器中收到警告

    以前,在一个IP上承载多个域名是不可能的。由于证书是在客户端发送实际HTTP请求之前获取的,并且HTTP请求包含主机:头行,该行告诉服务器要使用哪个URL,因此服务器无法知道为给定请求提供哪个证书。SNI将主机名添加到TLS握手的一部分,因此只要客户机和服务器都支持主机名(2015年,它得到了广泛支持),服务器就可以选择正确的证书

    即使没有SNI,为多个主机名提供服务的一种方法是使用包含使用者备选名称(SAN)的证书,SAN本质上是证书有效的附加域。例如,谷歌使用单一证书来保护其许多网站的安全

    另一种方法是使用通配符证书。可以获得“.example.com”这样的证书,在这种情况下,“www.example.com”和“foo.example.com”将