Não é possível fazer o httpd usar o SSL correto

5

Eu tenho uma CA assinada, emitida pela minha universidade. Gerei meu CSR usando seu arquivo de chave pública da seguinte forma:

openssl genrsa -out myservername.key 2048 (new key)
openssl req -new -key myservername.key -out myservername.csr 

Enviei-lhes o CSR, eles me enviaram de volta o arquivo .crt assinado.

Eu criei um diretório para minhas chaves CA e certificados e os coloquei lá.

A parte relevante do meu httpd.conf se parece com isso:

<VirtualHost _default_:443>
SSLEngine on
SSLCACertificateFile /var/cosign/certs/CA/publickey.pem
SSLCertificateFile /var/cosign/certs/myserver.crt
SSLCertificateKeyFile /var/cosign/certs/myserver.key

DocumentRoot /var/www/html/
<Directory /var/www/html>
    Options -Indexes
    AllowOverride All
</Directory>

Mas não está usando este certificado para SSL. Se eu fizer este comando:

openssl s_client -connect localhost:443 -showcerts

Eu entendo isso:

CONNECTED(00000003)
depth=0 C = --, ST = SomeState, L = SomeCity, O = SomeOrganization, OU = SomeOrganizationalUnit, CN = portcharlotte, emailAddress = root@portcharlotte
verify error:num=18:self signed certificate
verify return:1
depth=0 C = --, ST = SomeState, L = SomeCity, O = SomeOrganization, OU =     SomeOrganizationalUnit, CN = portcharlotte, emailAddress = root@portcharlotte
verify return:1
---
Certificate chain

Meu CSR continha detalhes adequados, não este "SomeState", o disparate de "SomeCity", que estou supondo ser um padrão.

O módulo openssl é instalado e carregado.

Os únicos erros que recebo nos logs são:

[Fri Jan 25 13:27:40 2013] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Fri Jan 25 13:27:40 2013] [warn] RSA server certificate CommonName (CN) 'portcharlotte' does NOT match server name!?

Eu estou supondo que esta incompatibilidade é porque está usando o certificado errado.

Minha pergunta é: como faço para usar o correto? O que estou perdendo?

    
por monkeymatrix 25.01.2013 / 14:48

2 respostas

10

SSLCACertificateFile /var/cosign/certs/CA/publickey.pem

A menos que o arquivo PEM contenha realmente o certificado de CA para os certificados cliente que você deseja conceder acesso, isso está incorreto; para fornecer ao apache uma cadeia de certificados, use SSLCertificateChainFile .

O Apache deve ter o certificado real e quaisquer certificados intermediários usados para assinar / produzir o certificado de terminal, até e incluindo um certificado raiz que seja de confiança dos navegadores.

Para verificar o certificado que eles lhe deram, execute:

openssl verify -CApath /path/to/CA/certs -purpose sslserver -verbose /your/certificate

Independentemente dos problemas de certificado, você está perdendo uma diretiva SSLRequireSSL em seu vhost; sem isso, o apache não verificará se há uma conexão segura.

Você também não deve usar _default_ como o virtualhost, e está faltando um ServerName .
Use *: 443 ou IP: 443 como o virtualhost.

Todo vhost deve ter um conjunto ServerName válido e, além disso, um vhost SSL deve ter um ServerName que corresponda ao CN do certificado.

Por exemplo:

<VirtualHost 1.2.3.4:443>
  ServerName your.certificates.common.name
  ServerAlias any.subject.alternate.names

  DocumentRoot /your/protected/content

  SSLEngine On
  SSLCertificateChainFile /path/to/your/issuers/CA/cert/bundle

  SSLCertificateFile /path/to/your/certificate.crt
  SSLCertificateKeyfile /path/to/your/private.key
 -OR- 
  SSLCertificateFile /path/to/your/combined.cert-and-keyfile

  SSLRequireSSL

</VirtualHost>

Estude a documentação um pouco.

    
por 28.01.2013 / 12:11
3

Executar

# Debian/Ubuntu
apache2ctl -S
# RHEL/CentOS
httpd -S

Deve produzir algo assim:

*:443                   is a NameVirtualHost
         default server hostname (/etc/apache2/sites-enabled/000-default:1)
         port 443 namevhost hostname (/etc/apache2/sites-enabled/000-default:1)

Verifique se você executou o comando openssl com o nome do host correto para acessar seu vhost, suponho que você tenha vários vhosts para a porta 443 e o que foi definido na configuração padrão da sua distribuição tenha precedência.

    
por 28.01.2013 / 12:10