O HPKP não substitui a validação normal. Em vez disso, é adicionalmente à validação normal. Assim, se a validação normal falhar, uma vez que o certificado é auto-assinado, o HPKP não ajudará.
Eu preciso usar o SSL em uma rede local e quero evitar o erro de certificado inválido do navegador.
A minha ideia é gerar um certificado auto-assinado e, em seguida, usar o Certificado de Fixação (HPKP), de modo a dizer ao navegador que apenas este certificado é confiável?
Atualmente, exploro todas as opções relacionadas a essa ideia. Eu testei com um certificado auto-assinado e cabeçalho HPKP (Public-Key-Pins) com valor, como:
"pin-sha256="somedataencodedbase64=";pin-max-age=10;includeSubDomains"
O navegador não aceita isso como seguro. Eu ainda preciso terminar este teste (com certificado auto-assinado diferente e preciso ter certeza de que o SPKI é calculado corretamente ...
Agora as perguntas são:
O certificado auto-assinado emitido para determinado nome de host local (por exemplo, mylocalserver) e fixado na resposta do servidor é válido? Isso vai funcionar mesmo?
A atribuição de certificados funciona para nomes de host locais (isso significa que só funciona com nomes de domínio)?
O certificado fixado precisa primeiro ser validado ou enviado pela CA (isso significa que os certificados auto-assinados não podem ser fixados - a menos que sejam adicionados ao Trust Store em um cliente)?
Qual seria a maneira mais simples de ter um SSL válido localmente, portanto, não preciso configurar o cliente (armazenamento de confiança do cliente)?
Podemos ver a fixação de certificados como alternativa de CA confiável? Eu li em algum lugar que é apenas adicionalmente , então isso significa que a cadeia de certificados precisa ser válida primeiro, então você pode defini-la?
Eu também penso cada vez mais se essa ideia vai funcionar. Porque então nós veríamos mais uso dessa técnica. Todo mundo iria gerar certificado auto-assinado e apenas pin-lo ... E economizar alguns dólares em um certificado confiável da CA ... Ou o que estou recebendo errado ou certo sobre todo o conceito?
Are self signed certificate issued for given local host name (e.g. mylocalserver) and pinned in server response even valid? Will this even work?
Sim, o HPKP simplesmente anuncia uma assinatura para um determinado certificado x.509. O navegador (ou qualquer cliente da web) armazena em cache apenas pelo período indicado e, em seguida, verifica essa assinatura durante outras visitas.
Does certificate pinning work for a local host names (this would mean, it only works with domain names)?
O nome do host local é um nome de host, como qualquer outro. Mesmo que seja curto. Mesmo que tenha um TLD local. A coisa é - como o seu cliente resolve e o que ele pede no cabeçalho Host:
da requisição HTTP. Se ele resolve um host foobar para um IP adequado e, em seguida, solicita esse Host:
na solicitação HTTP, e o certificado autoassinado tem seu CN definido como foobar , todo o esquema começa a funcionar.
Does pinned certificate have to firstly valid or thrusted by CA (this would mean self signed certificates can not be pinned - unless they are added to Trust Store on a client)?
Não, eles não. No entanto, de alguma forma o seu web-client deve ter uma maneira de confiar no certificado do servidor. Ou ele é colocado na lista de certificados do servidor confiável, ou você cria uma exceção (na verdade é a mesma que a anterior), você cria a CA local e assina o certificado do servidor com o seu certificado de CA local. O certificado do servidor autoassinado é apenas uma maneira de ignorar criação de CA local. A propósito, todas as autoridades oficiais usam o certificado autoassinado como o ponto raiz de sua infraestrutura de chave pública. Essa é a maneira legítima de criar a CA. Uma autoridade de certificação oficial é simplesmente um certificado da CA que é adicionado ao armazenamento confiável dos softwares mais conhecidos, como sistemas operacionais, navegadores e assim por diante. Negociar a adição custa dinheiro, é por isso que a maioria deles não é gratuita.
What would be the simplest another way to have a valid SSL locally, so I do not need to configure client (client Trust Store)?
Como obter um certificado autoassinado para todos os serviços que você possui. Se você tiver apenas alguns desses serviços, lida com certificados auto-assinados; se tiver dúzias, criará sua CA local. Há também uma maneira legítima e gratuita de obter certificados X.509 publicamente aceitos - basta usar a autoridade de certificação LetsEncrypt - é grátis. No entanto, eles não fornecem certificados curinga - aqueles com *
, e isso pode ser um problema se você tiver um grande número de serviços.
Can we seen certificate pinning as alternative of trusted CA? I read somewhere it is just additionally so this means certificate chain need to be valid first, then you can pin it?
Não. A marcação de certificados é a medida preventiva para ataques man-in-the-middle , quando alguém se faz passar pela CA de destino. Para isso, "alguém" já deve colocar seu certificado de CA raiz em seu armazenamento confiável, mas isso é outro problema.
I also think more and more if this idea will even work. Because then we would see more use of this technique. Everyone would generate self signed certificate and just pin it ... And save few bucks on a CA trusted certificate ... Or what I am getting wrong or right about the whole concept?
Você definitivamente é.
Depois de mais pesquisas, como eu realmente queria ir até a especificação real.
Então, o RFC 7469 diz:
2.3.1. Public-Key-Pins Response Header Field Processing
If the UA receives, over a secure transport, an HTTP response that includes a PKP header field conforming to the grammar specified in Section 2.1, and there are no underlying secure transport errors or warnings ...
Portanto, agora é oficialmente claro que primeiro é necessário um handshake SSL apropriado (incluindo a validação da cadeia de certificação) e então o HPKP pode acontecer ...