Um X509Certificate pode ser obtido no armazenamento de certificados pelo ASP.NET sem permissões de sistema de arquivos?

StackOverflow https://stackoverflow.com//questions/20007824

Pergunta

Onde deve um certificado que aparece no Trusted Root Certification Authorities nó em certificadomgr.msc ser mantido para que um aplicativo da web IIS possa obtê-lo e assinar uma declaração SAML com ele?Existe uma maneira de extrair o certificado diretamente da "colmeia" de certificados, que não requer permissões do sistema de arquivos?Ou é necessário exportar o certificado para uma pasta à qual o usuário interno do IIS7 tenha permissões de acesso?

O X509Certificate2.Import() o primeiro parâmetro do método é fileName.

Se eu exportar o certificado e colocar o arquivo na hierarquia de pastas do projeto do Visual Studio 2012 e fornecer um caminho totalmente qualificado para o Importar() método, a importação do certificado será bem-sucedida, mas somente se o aplicativo estiver sendo executado no Visual Studio construídas em servidor, não se estiver em execução no servidor Web IIS local.

Eu tentei usar o Nome amigável com X509KeyStorageFlags.MachineKeySet mas isso não funcionou.

EDITAR:Isso funciona ao usar o servidor Visual Studio integrado, mas não o servidor LOCAL IIS7 no Windows 7:

            certStore = New X509Store(StoreLocation.CurrentUser)
            certStore.Open(OpenFlags.ReadOnly)
            Dim thumbprint As String
            thumbprint = ConfigurationManager.AppSettings("thumb").ToString
            certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, False)
            certStore.Close()
            cert = certCollection(0)

então preciso descobrir como conceder acesso ao pool de aplicativos padrão a este certificado no Windows 7.

Foi útil?

Solução

Você não "importa", apenas cria uma instância.Formalmente, você abre um armazenamento de chaves e percorre os certificados.E sim, você não precisa de nenhuma permissão do sistema de arquivos, no entanto, para acessar a chave privada, a identidade do seu pool de aplicativos deve ter permissão para a chave, você define a permissão no snap-in do certificado do console mmc.

Editar:o código para acessar o certificado seria algo como:

var store = new X509Store( name, location );
store.Open( OpenFlags.ReadOnly );

foreach ( var cert in store.Certificates )
   ... loop and match, by thumbprint, friendly name or whatever else
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top