Isso me levou muito tempo para envolver minha mente, mas uma vez que você consegue, apenas clica.
O Apache não faz isso. Por um bom motivo.
Você viu esses CSRs enviados para obter seu CSR, certo? Com a informação (nome comum, cidade, estado, etc.)
Bem, uma chave privada praticamente compacta essa informação, e a única maneira de desbloqueá-la é usar a chave pública. Você pode dar isso como doce, mas você não distribui a chave privada.
Então, agora que você envia esses dados para um navegador da Web quando ele acessa sua página, o navegador usa sua chave pública para decodificar essas informações. Se a chave pública é a certa, o navegador vê (nome comum, cidade, estado, etc.) e sabe que o cara com quem está falando é legítimo.
Se a chave privada fosse algum servidor aleatório lá fora, os dados mesclados seriam descriptografados em mais dados mesclados. Lixo total. O navegador nesse ponto sabe que está falando com um impostor.
Além disso - o navegador usa chaves públicas da pessoa que assinou sua chave original (digamos, verisign ou godaddy), porque essas são fontes conhecidas e confiáveis ... Elas fazem isso para garantir que também conversem com a pessoa certa . É por isso que você geralmente recebe seus certificados de alguém como a Verisign.
Além disso - Você pode assinar seus próprios certificados e fazer com que seus usuários (como em um Domínio do AD) confiem em você, mas você precisa garantir que todas as máquinas de seus usuários confiam em seu "signatário". Esse é o próximo nível ...