公钥固定标头可以正确设置和失败testing

我正在尝试在nginx 1.7.12( Public-Key-Pins )中设置公钥密docker,但是我似乎错过了一些东西。 我知道如何生成相关的pin-sha256字段。

我认为它会这样工作:

  1. 如果我在头中包含当前证书的pin-sha256值,那么一切工作正常。
  2. 如果我不包含证书的pin-sha256 (也不包括任何中间或根证书),那么这应该是错误的,浏览器应该:
    • 防止访问该页面,
    • 输出关于引脚到控制台的错误,
    • 如果提供了,请按照请求的信息点击report-uri端点

真的发生了什么

在Firefox的情况下,仅仅是一个The site specified an invalid Public-Key-Pins header. 在控制台的警告和访问照常进行(如果1没有警告,所以标题应该是正确的)。 在Chrome中,没有任何一个sha256值可以与当前证书相匹配,这个访问一直在进行。

(在Arch Linux上使用Firefox 37和Chrome 41进行testing)。

我错过了什么? Public-Key-Pins头部的实际行为应该如何,以及如何在设置中触发错误,以便testing失败情况?

我目前的标题是这样的forms(短的最大年龄testing,正确填写FQDN

 Public-Key-Pins: pin-sha256="XOwgEECL9p3X2PctwnsIvbV+ySJ975dNYbm8wxkjzXg="; pin-sha256="NxVoMtbt/y2GI3lV/ROFIcDyz8kj/W8JTtoszmBezOg="; pin-sha256="aM2laE5XUTDaWo6RnfKZ9OZHrNz/KQmRxCRO6YmWHGE="; max-age=900; report-uri="https://<FQDN>/hpkp"; 

要被接受,你的销售必须:

  1. 包含当前证书链中的至less一个密钥
  2. 至less包含一个不在当前证书链中的密钥(“备份密钥”)。 我认为你的情况是缺less的。

testing它:

  • 使用firefox开发者版,进入networking标签,select一个请求,select右边的安全标签。 它必须显示“公钥密码”与状态
  • 如果您确实想要产生错误,请使用选项“包含子域名”,并用新密钥对任何子域名签名。 Firefox应该拒绝连接。

一些文档: https : //developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning

更具体地说:“如果我不包含证书的pin-sha256(也没有任何中间或根证书)”,那么浏览器不保存这个pin 。 仅当已保存的引脚列表与当前证书链不匹配时,浏览器才会显示连接错误。

https://scotthelme.co.uk/hpkp-toolset和https://report-uri.io/home/pkp_analyse可以帮&#x52A9;