DFe.NET
DFe.NET copied to clipboard
DFe.NET com IIS Access Denied ObterDoArrayBytes.
Olá, pessoal tive problemas com o uso da DFe.Net para uso com IIS na função ObterDoArrayBytes e as outras para pegar o certificado. O problema e que utilizando o X509KeyStorageFlags.MachineKeySet dá erro de Access Denied pois o usuário do Pool de aplicativos não tem permissão, desta forma modifiquei a função para.
private static X509Certificate2 ObterDoArrayBytes(byte[] arrayBytes, string senha)
{
try
{
var certificado = new X509Certificate2(arrayBytes, senha, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
return certificado;
}
catch (Exception ex)
{
try
{
var certificado = new X509Certificate2(arrayBytes, senha, X509KeyStorageFlags.MachineKeySet);
return certificado;
}
catch (Exception ex1)
{
string erro = ex.Message + " " + ex1.Message;
throw new Exception("Não foi possivel converter o stream para o certificado.", ex);
}
}
}
Com isso consegui resolver o meu problema, no inicio quando testava em DEBUG tudo ia muito bem pois o usuário que usa e do desktop ai ele tem direitos mas quando publicava a aplicação e rodada no IIS dava o erro.
Espero que ajude.
vlw
O nosso amigo @danilobreda entende mais de web que eu hehehe , ainda sou novato no web.
O objetivo da divulgação do código e que se alguém usar IIS com esta alteração vai ter acesso normalmente ao certificado Ok.
Alterando a ObterDoArrayBytes conforme esta acima.
Ahh sim hehehe mauz , desculpe Estou fazendo com bytes array também no meu Web , mas se tratando de Web sou Novato ainda , então não arrisco dar pitaco ainda hehehe obrigado @marcosmarchiore
@marcosmarchiore se o X509KeyStorageFlags fosse uma configuração, resolveria o problema?
@danilobreda eu acho que sim, eu fiz desta forma pois tenho clientes desktop e clientes com iis, ai se der erro em uma ele lê a outra, mas a boa pratica e a sua sugestão ai, parametrizar.
Eu tive o mesmo problema, porem para resolver (não sei se é a melhor pratica) foi add o usuario do IIS nas permissoes da pasta que ficam os certificados, o IIS_USR ("C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys") e funcionou perfeitamente.