Obtendo o Apache para obter o “nome do assunto Alt” do certificado

2

Estou tentando fazer com que o apache exponha vários fragmentos de certificados pessoais de clientes para php, incluindo (mais importante) o campo "alt subject name". Quando eu inspeciono um certificado no navegador, posso ver esse valor, mas ele não é exposto por padrão a partir do Apache (principalmente apenas CN / DN).

Executando o LAMPP 1.7.1

Alguma idéia?

    
por user7944 29.07.2009 / 15:50

3 respostas

3

O certificado codificado por PEM está disponível para seu aplicativo PHP na variável de ambiente

$SSL_CLIENT_CERT

Você pode usar as funções PHP openssl para analisar isso, o que lhe dá de volta uma matriz associativa de chaves e valores de certificados. Eu suponho que um deles será o seu nome alternativo.

link

Isso exigirá modificações no seu aplicativo PHP, mas não é terrível:

  • verifique a existência da variável de ambiente
  • decodifique o certificado
  • verifique a existência da chave que representa o nome alternativo
  • atribua o valor associado a essa chave a alguma outra variável que o restante do seu aplicativo possa usar

Poderia ser facilmente empacotado em uma função que você poderia incluir em vários aplicativos que eu pensava.

    
por 29.07.2009 / 17:03
1

Demorei um pouco para resolver isso e a informação é bastante dispersa, então aqui está como eu fiz isso ...

Primeiro, verifique se o seu Apache tem o seguinte conjunto:

SSLOptions +ExportCertData

caso contrário $ _SERVER ["SSL_CLIENT_CERT"] ficará em branco.

Depois de verificar que o $ _SERVER ["SSL_CLIENT_CERT"] tem conteúdo, use:

$clicertarray = openssl_x509_parse($_SERVER["SSL_CLIENT_CERT"]);

para analisar o certificado em uma matriz, você poderá usar o nome alternativo do assunto com:

$clicertarray["extensions"]["subjectAltName"];

    
por 04.08.2011 / 12:06
0

Use var_dump ($ _ ENV) e procure as variáveis que começam com SSL _

Além disso, verifique SSLOptions do manual do apache. StdEnvVars e ExportCertData têm boa aparência. Se o primeiro não ajudar, talvez você precise analisar os dados do certificado transmitidos por ExportCertData

    
por 29.07.2009 / 17:16