Public Key Pinning headers configuração correta e teste de falha

2

Estou tentando configurar o cabeçalho de Fixação de Chave Pública em nginx 1.7.12 ( Public-Key-Pins ), mas parece que estou perdendo alguma coisa. Eu sei como gerar os campos pin-sha256 relevantes.

Eu pensei que funcionaria assim:

  1. Se eu incluir o valor pin-sha256 do certificado atual no cabeçalho, tudo funcionará bem.
  2. Se eu não incluir o pin-sha256 do certificado (nem qualquer certificado intermediário ou raiz), isso deve significar um erro, e o navegador deve:
    • impede de visitar a página,
    • gera um erro relacionado aos pinos do console,
    • e, se fornecido, acessar o endpoint report-uri com informações sobre a solicitação

O que realmente acontece

No caso de 2. no Firefox, um mero aviso de The site specified an invalid Public-Key-Pins header. no console e a visita continuam como de costume (no caso de não haver avisos, o cabeçalho deve estar correto). No Chrome, nenhum sinal de que nenhum dos valores do sha256 pode ser correspondido ao certificado atual, a visita funciona o tempo todo.

(usando o Firefox 37 e o Chrome 41 no Arch Linux para testes).

O que estou perdendo? Qual deve ser o comportamento real do cabeçalho Public-Key-Pins e como posso acionar um erro na configuração para poder testar o caso de falha?

Meu cabeçalho atual está em um formato como este (short max-age para teste, preenchido corretamente 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";
    
por Gergely 13.04.2015 / 17:44

1 resposta

3

Para ser aceito, seu pin deve:

  1. Contém pelo menos uma chave da cadeia de certificados atual
  2. Contém pelo menos uma chave NOT na cadeia de certificados atual (uma "chave de backup"). Eu acho que este estava faltando no seu caso.

Para testar:

  • use a edição do firefox developper, vá na guia de rede, selecione uma solicitação, selecione a guia de segurança à direita. Deve indicar "Fixação de chave pública" com o status
  • se você realmente deseja produzir o erro, use a opção "incluir subdomínios" e assine qualquer subdomínio com uma nova chave. O Firefox deve recusar a conexão.

Alguns documentos: link

Para ser mais específico: "Se eu não incluir o certificado pin-sha256 (nem qualquer certificado intermediário ou raiz)", o navegador não salvará o pin . O navegador exibe o erro de conexão somente quando uma lista de pinos já salva não corresponde à corrente de certificados atual.

link e link pode ajudar

    
por 19.04.2015 / 00:42

Tags