O objetivo de um certificado SSL é que o navegador tenha um grau razoável de confiança na chave pública do servidor para transações HTTPS.
Primeiro, vamos explorar o que aconteceria se não usássemos certificados. Em vez disso, o servidor enviaria a chave pública em texto sem formatação e o navegador iniciaria a comunicação criptografada usando-a (a primeira coisa a fazer seria criptografar sua própria chave pública e enviá-la com segurança). E se eu, e atacante, me abrigássemos no meio? Eu poderia substituir sua chave pública em tempo real pela minha, ter uma conexão criptografada com o navegador, descriptografar todas as coisas que recebo, criptografá-la com sua chave pública e enviá-la (e vice-versa para tráfego do tipo resposta). Nenhuma parte notaria a diferença, pois ninguém conhecia as chaves públicas de antemão.
OK, então estabelecemos que precisamos de alguma maneira para o navegador confiar em minha chave pública. Uma maneira de fazer isso seria armazenar todas as chaves públicas registradas no navegador. Obviamente, isso exigiria uma atualização sempre que alguém registrasse uma chave pública, o que levaria a inchaço. Também é possível manter as chaves públicas nas mãos dos servidores DNS 1 , mas os servidores DNS também podem ser falsificados e o DNS não é um protocolo seguro.
Portanto, a única opção que resta é "encadear" a confiança por meio de um mecanismo de assinatura. O navegador armazena os detalhes de algumas CAs e seu certificado será enviado junto com uma cadeia de outros certificados, cada um assinando o próximo e subindo para a CA raiz / confiável / incorporada. O trabalho da CA é garantir que o domínio lhe pertença antes de assinar um certificado para você.
Como ser uma CA é um negócio, eles cobram por isso. Alguns mais que outros.
Se você criou seu próprio certificado, receberá um erro semelhante a:
Não há valor para um certificado não assinado. É como pegar um lápis e um livreto, desenhar um passaporte que afirma que você é Barack Obama. Ninguém vai confiar nisso.
1. Afinal, sua entrada DNS é criada quando você registra um domínio. Usar um protocolo mais robusto que permita registrar simultaneamente chaves públicas seria um conceito interessante.