Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Key Specification ("KeySpec") é uma propriedade associada a um certificado e chave. Ele especifica se uma chave privada associada a um certificado pode ser usada para assinatura, criptografia ou ambos.
Um valor KeySpec incorreto pode causar erros do AD FS e do Proxy de Aplicativo Web, como:
- Falha ao estabelecer uma conexão SSL/TLS com o AD FS ou o Proxy de Aplicativo Web, sem eventos do AD FS registrados (embora os eventos SChannel 36888 e 36874 possam ser registrados)
- Falha ao entrar na página de autenticação baseada em formulários AD FS ou WAP, sem nenhuma mensagem de erro mostrada na página.
Poderá ver o seguinte evento no registo de eventos:
Log Name: AD FS Tracing/Debug
Source: AD FS Tracing
Date: 2/12/2015 9:03:08 AM
Event ID: 67
Task Category: None
Level: Error
Keywords: ADFSProtocol
User: S-1-5-21-3723329422-3858836549-556620232-1580884
Computer: ADFS1.contoso.com
Description:
Ignore corrupted SSO cookie.
O que causa o problema
A propriedade KeySpec identifica como uma chave que é gerada ou recuperada usando a Microsoft CryptoAPI (CAPI) de um CSP (Cryptographic Storage Provider) herdado da Microsoft pode ser usada.
Um valor KeySpec de 1, ou AT_KEYEXCHANGE, pode ser usado para assinatura e criptografia. Um valor de 2, ou AT_SIGNATURE, é usado apenas para assinatura.
A configuração incorreta mais comum do KeySpec é usar um valor de 2 para um certificado diferente do certificado de assinatura de token.
Para certificados cujas chaves foram geradas usando provedores CNG (Cryptography Next Generation), não há nenhum conceito de especificação de chave, e o valor KeySpec é sempre zero.
Saiba como verificar se há um valor KeySpec válido na próxima seção deste artigo.
Exemplo
Um exemplo de um CSP herdado é o Microsoft Enhanced Cryptographic Provider.
O formato de blob de chave CSP RSA da Microsoft inclui um identificador de algoritmo, CALG_RSA_KEYX ou CALG_RSA_SIGN, para atender a solicitações de serviço de chaves AT_KEYEXCHANGE ou AT_SIGNATURE.
Os identificadores do algoritmo de chave RSA são mapeados para os valores KeySpec da seguinte maneira:
Algoritmo suportado pelo provedor | Valor da especificação principal para chamadas CAPI |
---|---|
CALG_RSA_KEYX : chave RSA que pode ser usada para assinatura e desencriptação |
AT_KEYEXCHANGE (ou KeySpec=1 ) |
CALG_RSA_SIGN : Chave somente assinatura RSA |
AT_SIGNATURE (ou KeySpec=2 ) |
Valores KeySpec e significados associados
A seguir estão os significados dos vários valores KeySpec:
Valor de especificação chave | Meios | Utilização recomendada do AD FS |
---|---|---|
0 |
O certificado é um certificado CNG | Apenas certificado SSL |
1 |
Para um certificado CAPI (não CNG) herdado, a chave pode ser usada para assinatura e descriptografia | SSL, assinatura de token, desencriptação de token, certificados de comunicação de serviço |
2 |
Para um certificado CAPI (não CNG) herdado, a chave pode ser usada apenas para assinatura | não recomendado |
Como verificar o valor KeySpec para seus certificados / chaves
Para ver o valor de um certificado, pode-se usar a ferramenta de linha de comando certutil
.
Segue-se um exemplo: certutil –v –store my
. Este comando despeja as informações do certificado na tela.
Em CERT_KEY_PROV_INFO_PROP_ID, verifique duas coisas:
ProviderType: Isso indica se o certificado usa um CSP (Provedor de Armazenamento Criptográfico) herdado ou um Provedor de Armazenamento de Chaves baseado em APIs CNG (Certificate Next Generation) mais recentes. Qualquer valor diferente de zero indica um provedor herdado.
KeySpec: A tabela a seguir mostra os valores válidos
KeySpec
para um certificado AD FS:Provedor CSP herdado (ProviderType não igual a 0):
Finalidade do Certificado do AD FS Valores KeySpec válidos Comunicação de Serviço 1 Desencriptação de Token 1 Assinatura de token 1 e 2 SSL 1 Fornecedor de GNC (ProviderType = 0):
Finalidade do Certificado do AD FS Valores KeySpec válidos SSL 0
Como alterar o keyspec do seu certificado para um valor suportado
A alteração do valor KeySpec não requer que o certificado seja regenerado ou reemitido. O KeySpec pode ser alterado reimportando o certificado completo e a chave privada de um arquivo PFX para o armazenamento de certificados usando as etapas a seguir.
- Verifique e registre as permissões de chave privada no certificado existente para que elas possam ser reconfiguradas, se necessário, após a reimportação.
- Exporte o certificado, incluindo a chave privada, para um arquivo PFX.
- Execute as seguintes etapas para cada servidor AD FS e WAP.
- Exclua o certificado (do servidor AD FS / WAP).
- Abra um prompt de comando do PowerShell com privilégios elevados.
- Importe o arquivo PFX em cada servidor AD FS e WAP usando a sintaxe a seguir, especificando o
AT_KEYEXCHANGE
valor (que funciona para todos os fins de certificado do AD FS):certutil –importpfx certfile.pfx AT_KEYEXCHANGE
- Digite a senha PFX.
- Após a conclusão do processo acima, faça o seguinte:
- Verifique as permissões de chave privada.
- Reinicie o serviço AD FS ou WAP.