WEBAPI E CERTIFICADO A3 - TOKEN
Bom dia senhores (as)
Alguém aqui consegue usar certificado tipo A3 por uma WEBAPI ?
Pois quando testo ela em debug (ou seja, local), funciona tudo normal. Mas se eu compilar, e colocar no aplicativo IIS, fica me retornando que não existe nenhum certificado.
Alguém já passou por isso ?
Segue o Código, ( projeto Class Library )
Alguém aqui consegue usar certificado tipo A3 por uma WEBAPI ?
Pois quando testo ela em debug (ou seja, local), funciona tudo normal. Mas se eu compilar, e colocar no aplicativo IIS, fica me retornando que não existe nenhum certificado.
Alguém já passou por isso ?
Segue o Código, ( projeto Class Library )
public X509Certificate2 SelecionarCertificado(string serieCertDigital)
{
X509Certificate2 certificate = new X509Certificate2();
ok = true;
try
{
X509Certificate2Collection certificatesSel = null;
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection certificates = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true).Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, true);
if ((string.IsNullOrEmpty(serieCertDigital)))
{
certificatesSel = X509Certificate2UI.SelectFromCollection(certificates, [Ô]Certificados Digitais[Ô], [Ô]Selecione o Certificado Digital para uso no aplicativo[Ô], X509SelectionFlag.SingleSelection);
if ((certificatesSel.Count == 0))
{
certificate.Reset();
//Throw New Exception([Ô]Nenhum certificado digital foi selecionado ou o certificado selecionado está com problemas.[Ô])
mensagem += [Ô]Nenhum certificado digital foi selecionado ou o certificado selecionado está com problemas.[Ô];
ok = false;
}
else
{
certificate = certificatesSel[0];
}
}
else
{
certificatesSel = certificates.Find(X509FindType.FindBySerialNumber, serieCertDigital, true);
if ((certificatesSel.Count == 0))
{
certificate.Reset();
mensagem += [Ô]Certificado digital não encontrado [Ô] + certificates.Count.ToString();
ok = false;
return null;
}
else
{
certificate = certificatesSel[0];
}
}
store.Close();
}
catch (Exception)
{
//Throw New Exception(exception.Message)
mensagem += [Ô]Falha detectada ao verificar o certificado[Ô];
ok = false;
return null;
}
return certificate;
}
Duas coisas:
1 - Em se tratando de algo sério como certificados digitais, o ideal é fazer tratamento de exceções bem detalhado, ainda que mais trabalhoso, será muito mais preciso em problemas que podem ser um tremendo de um nó, quando aparecem. Aquele bloco catch pegando uma exceção genérica, é algo bacana de se ter, mas considere colocar um catch para cara possÃvel exceção lançada por cada método dentro do Try.
2 - O certificado precisa ser instalado e associado corretamente.
1 - Em se tratando de algo sério como certificados digitais, o ideal é fazer tratamento de exceções bem detalhado, ainda que mais trabalhoso, será muito mais preciso em problemas que podem ser um tremendo de um nó, quando aparecem. Aquele bloco catch pegando uma exceção genérica, é algo bacana de se ter, mas considere colocar um catch para cara possÃvel exceção lançada por cada método dentro do Try.
2 - O certificado precisa ser instalado e associado corretamente.
Já fiz todo esse procedimento anteriormente, o problema é que não consigo exportar a chave privada do Certificado A3 no Token.
Cleverton,
Pelo que sei certificado A3 é bem complicado de usar em aplicações WEB, o recomendado é usar certificado A1, porque com certificado A1 não precisa instalar ele, precisa apenas informar o arquivo e a senha de instalação do mesmo.
Pelo que sei certificado A3 é bem complicado de usar em aplicações WEB, o recomendado é usar certificado A1, porque com certificado A1 não precisa instalar ele, precisa apenas informar o arquivo e a senha de instalação do mesmo.
Tópico encerrado , respostas não são mais permitidas