Por que não consigo usar certificados SSL importados via Server Admin em uma instalação personalizada do Apache?

2

Eu tenho alguns servidores Mac OS X 10.6.8 Server que executam uma pilha personalizada AMP255 (Apache 2.x, MySQL 5.xe PHP 5.x) instalada usando MacPorts. Temos muitos servidores Mac OS X Server e geralmente instalamos SSL certs via Server Admin e eles "simplesmente funcionam" nos serviços internos, no entanto, esses servidores web sempre tiveram SSL certs instalados em um local não padrão e usado apenas para o Apache.

Para encurtar a história, estamos tentando padronizar essa parte de nossa administração e instalar certs via Server Admin, mas nos deparamos com o seguinte problema: quando os certs são instalados via Server Admin e referenciados em nossos arquivos conf Apache, o Apache Em seguida, solicita uma senha ao tentar iniciar. Não parece ser qualquer senha que conhecemos, certamente não as senhas de admin ou chaves! Adicionamos o usuário _www ao certusers (principalmente para garantir que eles tenham acesso adequado à chave privada em /etc/certificates/ ).

Assim, com os certs instalados personalizados, temos os seguintes arquivos (basicamente colados da empresa em que compramos nossos certificados):

-rw-r--r--   1 root  admin  1395 Apr 10 11:22 *.domain.tld.ca
-rw-r--r--   1 root  admin  1656 Apr 10 11:21 *.domain.tld.cert
-rw-r--r--   1 root  admin  1680 Apr 10 11:22 *.domain.tld.key

E o seguinte no VirtualHost in /opt/local/apache2/conf/extra/httpd-ssl.conf :

SSLCertificateFile /path/to/certs/*.domain.tld.cert
SSLCertificateKeyFile /path/to/certs/*.domain.tld.key
SSLCACertificateFile /path/to/certs/*.domain.tld.ca

Esta configuração funciona normalmente.

Se usarmos os certs instalados via Server Admin, ambos Server Admin & Chaveiro mostra como válido, eles estão instalados em /etc/certificates/ da seguinte forma:

-rw-r--r--    1 root  wheel      1655 Apr  9 13:44 *.domain.tld.SOMELONGHASH.cert.pem
-rw-r--r--    1 root  wheel      4266 Apr  9 13:44 *.domain.tld.SOMELONGHASH.chain.pem
-rw-r-----    1 root  certusers  3406 Apr  9 13:44 *.domain.tld.SOMELONGHASH.concat.pem
-rw-r-----    1 root  certusers  1751 Apr  9 13:44 *.domain.tld.SOMELONGHASH.key.pem

E se substituirmos as linhas mencionadas acima em httpd-ssl.conf pelo seguinte:

SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem
SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem
SSLCertificateChainFile /etc/certificates/*.domain.tld.SOMELONGHASH.chain.pem

Isso solicita a senha desconhecida. Eu também tentei httpd-ssl.conf configurado da seguinte forma:

SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem
SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem
SSLCertificateChainFile /etc/certificates/*.domain.tld.SOMELONGHASH.concat.pem

E como:

SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem
SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem
SSLCACertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.chain.pem

Verificamos que o certificado está configurado para permitir que todos os aplicativos o acessem (no Assistente de Chaves). Um diff do /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem & *.domain.tld.key arquivos mostram que o primeiro é criptografado e o segundo não, portanto, estamos assumindo que o Server Admin / Keychain Assistant está criptografando-os por algum motivo.

Eu sei que posso criar um arquivo de chave não criptografado da seguinte forma:

sudo openssl rsa -in /etc/certificates/*.domain.tld.SOMELONGHASH.key.pem -out /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem

Mas não posso fazer isso sem digitar a senha. Pensei que poderia exportar uma cópia não criptografada da chave do Administrador de Chaves, mas não vejo essa opção (sem mencionar que as opções .pem estão esmaecidas em todas as opções de exportação).

Qualquer ajuda seria muito apreciada.

    
por morgant 11.04.2012 / 01:15

2 respostas

2

Exporte o certificado como .p12 . Registre a senha usada.

Retire a chave pública do arquivo .p12 - ela solicitará a senha que acabou de ser definida na exportação.

openssl pkcs12 -in /path/to/exported/cert.p12 -out /etc/certificates/new.pem -nokeys

Verifique quantos certificados estão agora no arquivo de saída; você pode abri-lo em qualquer editor de texto - pode ser apenas o certificado do assunto, ou pode conter toda a cadeia (os certificados no arquivo .ca que sua CA lhe forneceu). Se tiver toda a cadeia, tudo bem - o Apache aceitará tudo no mesmo arquivo sem problemas. Se não, então continue usando o arquivo de corrente que eles te deram.

Então, vamos puxar a chave privada também:

openssl pkcs12 -in /path/to/exported/cert.p12 -out /etc/certificates/new.key -nocerts -nodes

Observe que o sinal -nodes instrui o comando a não usar criptografia para a chave privada; isso impedirá que o Apache solicite a senha.

Apache o Apache para esses novos arquivos e reinicie. Deve ser bom para ir!

    
por 11.04.2012 / 18:00
2

Como Shane insinuou nos comentários, pode-se exportar o certificado como um arquivo PKCS # 12 ( .p12 ) do Keychain Access (com ou sem uma senha, naturalmente a senha que protege esta etapa é mais segura). Para fazer isso, você deve primeiro iniciar o Acesso às Chaves como o usuário root, portanto, sudo /Applications/Utilities/Keychain\ Access.app/Contents/MacOS/Keychain\ Access & . A partir daí, consegui executar os seguintes comandos para extrair a chave privada do arquivo .p12 exportado sem criptografia e colocá-lo junto com a chave criptografada em /etc/certificates/ :

sudo openssl pkcs12 -in *.domain.tld.p12 -out /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem -nodes -nocerts
sudo chown root:certusers /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem
sudo chmod 640 /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem

Agora, tenho os seguintes arquivos em /etc/certificates/ :

-rw-r--r--    1 root  wheel      1655 Apr  9 13:44 *.domain.tld.SOMELONGHASH.cert.pem
-rw-r--r--    1 root  wheel      4266 Apr  9 13:44 *.domain.tld.SOMELONGHASH.chain.pem
-rw-r-----    1 root  certusers  3406 Apr  9 13:44 *.domain.tld.SOMELONGHASH.concat.pem
-rw-r-----    1 root  certusers  1867 Apr 11 08:30 *.domain.tld.SOMELONGHASH.key.no_password.pem
-rw-r-----    1 root  certusers  1751 Apr  9 13:44 *.domain.tld.SOMELONGHASH.key.pem

Eu atualizei meu arquivo httpd-ssl.conf para:

SSLCertificateFile /etc/certificates/*.domain.tld.SOMELONGHASH.cert.pem
SSLCertificateKeyFile /etc/certificates/*.domain.tld.SOMELONGHASH.key.no_password.pem
SSLCertificateChainFile /etc/certificates/*.domain.tld.SOMELONGHASH.chain.pem

Reiniciou o Apache e funciona perfeitamente.

Eu havia encoberto essa parte disso na minha pergunta inicial, mas para garantir que o usuário _www fosse adicionado ao grupo certusers (que é necessário para o Apache ler a chave privada desde que eu preservei essas permissões) , Eu usei o seguinte comando:

sudo dseditgroup -o edit -a _www -t user certusers
    
por 11.04.2012 / 18:05