Como eu usaria o HTTPS na configuração do dispositivo baseado na Web executando um ponto de acesso e sem acesso à Internet?

7

Estou construindo um dispositivo baseado em Raspberry Pi para jardineiros de quintal com uma página da web e um ponto de acesso para a configuração inicial, incluindo a configuração de Wi-Fi. A conexão usa WPA2 e os únicos dois dispositivos nessa rede interna seriam o próprio dispositivo e o telefone / tablet / laptop do usuário. O ponto de acesso é visível apenas durante a configuração, o que reduz a probabilidade de invasores externos serem capazes de adivinhar a senha aleatória enviada de fábrica. Portanto, tenho tráfego criptografado, quase certamente apenas dois nós, por um curto período de tempo e uma senha aleatória. Portanto, não há necessidade de HTTPS que eu possa ver e planejei executar o HTTP.

No entanto, hoje soube que a partir de julho o Chrome começará a marcar todos os sites HTTP como inseguros. [1] Porém, como a configuração do Wi-Fi será feita por ponto de acesso, ainda não há acesso à Internet para verificar os certificados TLS, que eu entendo serem necessários para a operação adequada. [2] Eu poderia autoassinar o certificado, mas isso apresenta outros problemas. [3]

Então, minhas opções parecem ser:

  • Apresente a página de configuração com uma mensagem grande e assustadora: "Este site não é seguro"
  • Apresente a página de configuração com uma mensagem grande e assustadora: "Este certificado não é confiável" (por exemplo, autoassinado)

Como você forneceria esse lindo cadeado verde por padrão para uma página de configuração do dispositivo?

[1] https://www.theverge.com/2018/2/8/16991254/chrome-not-secure-marked-http-encryption-ssl

[2] /security/56389/ssl-certificate-framework-101-how-does-the-browser-actually-verify-the-validity?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

[3] https://www.globalsign.com/en/ssl-information-center/dangers-self-signed-certificates/

Bro lento
fonte
Parte de sua pergunta se baseia em mal-entendidos: você não precisa de acesso à Internet em geral para verificar um certificado. O arquivo da cadeia de certificados no dispositivo precisa rastrear de volta a uma raiz de confiança conhecida pelo navegador. Caso contrário, apenas ter acesso à Internet não será suficiente, seria necessário seguir um processo para adicionar uma autoridade de certificação adicional ao navegador.
Chris Stratton
Eu já tenho um certificado confiável pela maioria dos navegadores do meu site principal. Então, eu usaria meu certificado existente, digamos, se fosse um curinga, que já é confiável para iPhones e Androids?
Slow Bro
Não. Absolutamente não !!! se você fizesse isso, revelaria o segredo que permitiria se passar por seu site para todos que comprassem um de seus produtos. O certificado usado para esse fim precisa ser usado apenas para esse fim e considerado comprometido desde o início. Se você precisar proteger os usuários, precisará de um certificado exclusivo por caixa. Isso é relativamente fácil de fazer com uma CA personalizada para um cliente que você controla como um aplicativo móvel personalizado, mas é muito mais difícil para um navegador que possui apenas raízes de confiança de estoque.
Chris Stratton #
11
Para ter um certificado único por dispositivo, você precisa de uma CA disposta a assinar economicamente muitos deles. Se você pode criar um cliente personalizado como um aplicativo móvel que você escreve, pode confiar na sua própria CA personalizada. Mas se suas caixas precisarem ser confiáveis ​​pelos navegadores de ações com listas de confiança de ações, você precisará trabalhar com uma CA reconhecida.
Chris Stratton
11
Obrigado, isso está ficando mais claro agora. Por que você não posta isso como resposta e eu vou votar novamente?
Slow Bro

Respostas:

4

Uma opção possível é usar HTTPS e enviar um certificado real no dispositivo:

Como você controla o ponto de acesso, você presumivelmente controla o servidor DHCP no ponto de acesso, para que ele possa fornecer um endereço de servidor DNS ao mesmo tempo.

Este servidor DNS pode estar no AP e pode resolver um nome de host totalmente qualificado para apontar para ele próprio.

Em seguida, você pode adquirir um certificado para esse nome de domínio totalmente qualificado e empacotá-lo com o produto para criar uma conexão HTTPS totalmente verificada.

Um grande problema com essa idéia é que você está enviando a chave privada e o certificado para esse nome de domínio; portanto, você deve assumir que ela será comprometida em algum momento para nunca colocar uma máquina real (talvez seja necessário executar uma máquina com este nome por um período muito curto para realmente obter o certificado) na Internet que usa esse nome de host como invasores poderiam falsificá-lo facilmente.

Além disso, o firmware do AP teria uma vida útil limitada, pois o certificado expiraria (provavelmente depois de um ano por padrão iirc), e você receberia avisos desagradáveis ​​do certificado expirado.

Próxima ideia:

Abandone o modo Ponto de Acesso WiFi e use Bluetooth, por exemplo

https://www.hardill.me.uk/wordpress/2016/09/13/provisioning-wifi-iot-devices/

A desvantagem é que a Apple atualmente não suporta o WebBluetooth, mas o Chrome no Windows / Linux / Mac e você pode enviar um aplicativo iOS nativo para usuários de telefones / tablets da Apple.

hardillb
fonte
Então, estou imaginando isso, com base na sua resposta: Configure o DNS e o DHCP no dispositivo. Um dos registros DNS é device1234.myrealdomain.com, onde myrealdomain.com é um, meu domínio real :-) O certificado device1234 foi assinado pela minha CA antes de sair da fábrica e o iPhone / Android possui essa cadeia de confiança já incorporada e sabe confiar nesse dispositivo. Não preciso ter acesso à Internet para verificar e, quando o certificado está prestes a expirar, envio um certificado recém-assinado. Isso funcionaria?
Slow Bro
Não, você absolutamente não deve usar um certificado para qualquer coisa significativa (como o seu site) para esse fim, porque você o distribuirá para muitas caixas. Ao fazer isso, você efetivamente publica a parte supostamente secreta para todos verem. Você também precisará de algo com um tempo de expiração muito mais longo do que muitas CAs emitem hoje - caso contrário, uma caixa que permaneceu desligada por um ano ou dois não poderia ser conectada novamente e acessada por um navegador obrigatório por tempo suficiente para configurar para acessar a Internet, de modo a obter um certificado atualizado para satisfazer o navegador.
Chris Stratton
Chris dá uma olhada na minha resposta logo acima da sua, na qual descrevo uma situação em que envio certificados específicos do dispositivo, não o certificado principal do site, para cada dispositivo. No caso de o dispositivo ficar offline por mais de um ano, consideraria isso quebrado. Estes não serão fabricados e ficarão em uma prateleira, eles serão configurados imediatamente antes de sair da fábrica.
Slow Bro
Se você possui sua própria CA, não precisa do servidor DNS, pode emitir certificados para o endereço IP do dispositivo, o que simplifica tudo. E os certificados podem expirar quando quiser
hardillb
11
Um certificado de 90 dias é completamente, totalmente, totalmente e absolutamente inviável para embalagem em um produto de hardware. Seria um pesadelo de suporte ao cliente e provavelmente afundaria seus negócios. Não faça isso. Nem pense em fazê-lo.
Chris Stratton