Chave inválida para uso no estado especificado
Srs
Construi um WebService onde possuo um codigo para assinar um arquivo XML.
Quando rodo o WebMethod pelo Debugger funciona perfeitamente, porém quando publico o Webservice no IIS , mesmo que em localhost recebo o erro
"Chave inválida para uso no estado especificado"
no momento que tento receber o PrivateKey de um certificado digital.
signedXml = new SignedXml(xmlToSigning);
// Na linha em vermelho ocorre o problema
signedXml.SigningKey = certificadoDigital.PrivateKey;
Ja fiz alguns testes e verifiquei que estou conseguindo ler o certificado . Me parece algum problema para conseguir ler o PrivateKey.
Suspeito que seja algo com permissões pois, estou usando IIS7.0 com Vista e no debug funciona normalmente.
Pilha do erro abaixo
System.Exception: Problemas ao enviar Chave inválida para uso no estado especificado.
em System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
em System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
em System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
em System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
em System.Security.Cryptography.RSACryptoServiceProvider..ctor(CspParameters parameters)
em System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
em AvaCorp.Virtual.Util.AssinaturaDigital.AssinaDocumento(X509Certificate2 certificadoDigital, String Uri, XmlDocument xmlDocument, TipoAssinatura tipoAssinatura) na C:\AvaCorp\Virtual\Util\AssinaturaDigital.cs:linha 122
em AvaCorp.Virtual.Util.Serializacao.SerializaDocumento(Type tipo, Object objetoNegocios, String serialCertificadoDigital) na C:\AvaCorp\Virtual\Util\Serializacao.cs:linha 47
em AvaCorp.Virtual.Util.Serializacao.ExportaDocumento(Int32 pChaveAcesso, Int32 pGrupo, Int32 pEmpresa, Int32 pFilial, Int32 pUnidade, Int32 pCodigoUsuario, Int32 pTipoDocumento) na C:\AvaCorp\Virtual\Util\Serializacao.cs:linha 63
em AvaCorpVirtual.EnviarDocumentoEletronico(Int32 pChaveAcesso, Int32 pTipoDocumento, Int32 pGrupo, Int32 pEmpresa, Int32 pFilial, Int32 pUnidade, Int32 pCodigoUsuario)
em AvaCorpVirtual.EnviarDocumentoEletronico(Int32 pChaveAcesso, Int32 pTipoDocumento, Int32 pGrupo, Int32 pEmpresa, Int32 pFilial, Int32 pUnidade, Int32 pCodigoUsuario)
Construi um WebService onde possuo um codigo para assinar um arquivo XML.
Quando rodo o WebMethod pelo Debugger funciona perfeitamente, porém quando publico o Webservice no IIS , mesmo que em localhost recebo o erro
"Chave inválida para uso no estado especificado"
no momento que tento receber o PrivateKey de um certificado digital.
signedXml = new SignedXml(xmlToSigning);
// Na linha em vermelho ocorre o problema
signedXml.SigningKey = certificadoDigital.PrivateKey;
Ja fiz alguns testes e verifiquei que estou conseguindo ler o certificado . Me parece algum problema para conseguir ler o PrivateKey.
Suspeito que seja algo com permissões pois, estou usando IIS7.0 com Vista e no debug funciona normalmente.
Pilha do erro abaixo
System.Exception: Problemas ao enviar Chave inválida para uso no estado especificado.
em System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
em System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
em System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
em System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
em System.Security.Cryptography.RSACryptoServiceProvider..ctor(CspParameters parameters)
em System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
em AvaCorp.Virtual.Util.AssinaturaDigital.AssinaDocumento(X509Certificate2 certificadoDigital, String Uri, XmlDocument xmlDocument, TipoAssinatura tipoAssinatura) na C:\AvaCorp\Virtual\Util\AssinaturaDigital.cs:linha 122
em AvaCorp.Virtual.Util.Serializacao.SerializaDocumento(Type tipo, Object objetoNegocios, String serialCertificadoDigital) na C:\AvaCorp\Virtual\Util\Serializacao.cs:linha 47
em AvaCorp.Virtual.Util.Serializacao.ExportaDocumento(Int32 pChaveAcesso, Int32 pGrupo, Int32 pEmpresa, Int32 pFilial, Int32 pUnidade, Int32 pCodigoUsuario, Int32 pTipoDocumento) na C:\AvaCorp\Virtual\Util\Serializacao.cs:linha 63
em AvaCorpVirtual.EnviarDocumentoEletronico(Int32 pChaveAcesso, Int32 pTipoDocumento, Int32 pGrupo, Int32 pEmpresa, Int32 pFilial, Int32 pUnidade, Int32 pCodigoUsuario)
em AvaCorpVirtual.EnviarDocumentoEletronico(Int32 pChaveAcesso, Int32 pTipoDocumento, Int32 pGrupo, Int32 pEmpresa, Int32 pFilial, Int32 pUnidade, Int32 pCodigoUsuario)
Alessandro Pedroso
Curtidas 0
Respostas
Fabio Mans
19/02/2009
Você tem outra máquina para testar? Fiz uma pesquisa e pelo que vi é problema no Visual Studio.http://support.microsoft.com/kb/907665/pt-brhttp://social.msdn.microsoft.com/forums/pt-BR/vsvbasicpt/thread/7be26507-f144-4836-9a89-e201c51504e6/Fabio
GOSTEI 0