amagovpt / autenticacao.gov

Middleware Oficial de Identificação Eletrónica em Portugal - Cartão de Cidadão, da Chave Móvel Digital e Sistema de Certificação de atributos profissionais
https://www.autenticacao.gov.pt
European Union Public License 1.2
168 stars 33 forks source link

Erro ao obter o ficheiro SOD do Cartão de Cidadão #57

Closed acanuto closed 3 years ago

acanuto commented 3 years ago

Bom dia,

Ao tentar ler um cartão de cidadão em .NET dá o seguinte erro "Erro ao obter o ficheiro SOD do Cartão de Cidadão - cartão inválido ou cartão expirado!", estamos a usar o pteidlib_dotnet.dll com a versão 3.4.0.4151.

Abrindo através da aplicação autenticação.gov é possível ler os dados do cartão.

Como poderemos resolver está situação?

ACamposPT commented 3 years ago

Boa tarde, Pedimos para detalhar melhor o que está a fazer. Pode ainda adicionar excertos do código que está a utilizar. A aplicação autenticação.gov não tem nenhuma mensagem de erro com essa mensagem em específico.

acanuto commented 3 years ago

Boa tarde, Pedimos para detalhar melhor o que está a fazer. Pode ainda adicionar excertos do código que está a utilizar. A aplicação autenticação.gov não tem nenhuma mensagem de erro com essa mensagem em específico.

Boa tarde, O erro em questão é "SOD Error: invalid signature" Só ocorre quando tentamos ler um cartão de cidadão que tenha a validade expirada exemplo cartão expirado em Agosto de 2020.

ACamposPT commented 3 years ago

Boa tarde, Esse comportamento é o comportamento esperado para Cartões expirados. No entanto, devido a pandemia vários documentos, entre os quais o Cartão de Cidadão, cujo prazo expirou depois de 24 de fevereiro de 2020, continuam válidos até 31 de março de 2021.

A versão mais atualizada da aplicação já prevê esta excepção, pensamos que podes estar a usar uma versão desactualizada da pteidlib_dotnet.dll. Pedimos para verificar.

Caso não verifique se seja um problema de versões, pedimos para indicar quais os métodos que esta a usar.

acanuto commented 3 years ago

O erro corre logo na abertura do cartão de cidadão na função AbreCartãoDeCidadão:

Dim eid As PTEID_EId

If Not AbreCartãoDeCidadão(eid) Then

Return

End If

Nome.Value = String.Format("{0} {1}", ConverteDadosCartãoCidadão(eid.getGivenName, maiusculas).Trim, ConverteDadosCartãoCidadão(eid.getSurname, maiusculas).Trim)

[…]

Friend Function AbreCartãoDeCidadão(ByRef eid As PTEID_EId, ByRef card As PTEID_EIDCard, Optional mostraMsg As Boolean = True, Optional ByRef erro As String = "") As Boolean

    Try

        PTEID_ReaderSet.initSDK()

        Dim readerContext As PTEID_ReaderContext

        Dim readerSet As PTEID_ReaderSet

        readerSet = PTEID_ReaderSet.instance()

        If readerSet.readerCount() > 0 Then

            For i As UInteger = 0 To CUInt(readerSet.readerCount() - 1)

                readerContext = readerSet.getReaderByNum(i)

                If readerContext.isCardPresent() Then

                    If readerContext.getCardType <> PTEID_CardType.PTEID_CARDTYPE_UNKNOWN Then

                        card = readerContext.getEIDCard()

                        If Not IsNothing(card) Then

                            If card.isActive Then

                                Exit For

                            End If

                        End If

                    End If

                End If

            Next

        End If

        If IsNothing(card) Then

            PTEID_ReaderSet.releaseSDK()

            If mostraMsg Then XtraMessageBox.Show("Não existe nenhum leitor/Cartão de Cidadão instalado!", "Não foi possível localizar o Cartão de Cidadão", MessageBoxButtons.OK, MessageBoxIcon.Error)

            Return False

        End If

        eid = card.getID

        Return True

    Catch ex1 As PTEID_Exception

        ErrosGlobaisCartãoDeCidadão(ex1, ModuloName & " - btnMorada_CCid_Click", mostraMsg)

        Return False

    Catch ex As Exception

        If mostraMsg Then XtraMessageBox.Show("Ocorreu um erro ao tentar localizar o Cartão de Cidadão!", "Não foi possível localizar o Cartão de Cidadão", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Return False

    End Try

End Function
ACamposPT commented 3 years ago

Viva,

Pelo teu código estas a usar uma biblioteca de Visual Basic. Podes partilhar qual é essa biblioteca para ver possíveis causas para o problema?

Por enquanto, pedimos para entrar no nossa aplicação e ativar o modo de diagnóstico, como podes ver aqui:

https://amagovpt.github.io/docs.autenticacao.gov/user_manual.html#configura%C3%A7%C3%A3o-da-aplica%C3%A7%C3%A3o

Depois volta a testar com a tua aplicação a leitura do cartão e no final envia o ficheiro log.

acanuto commented 3 years ago

Bom dia, peço desculpa pela demora, temos estado a tentar arranjar um cartão de cidadão caducado para testar. Espero que até ao final do dia consiga arranjar. Em relação a biblioteca estamos a usar a seguinte

Type: pt.portugal.eid.PTEID_EId

Assembly: pteidlib_dotnet, Version=3.4.0.4151, Culture=neutral, PublicKeyToken=1fa91d379e36932f

MVID: 6C7BFBFE-1A62-4DE5-9A07-FB75A6AE9C4A

Assembly location: C:\Program Files\Portugal Identity Card\sdk\dotnet\pteidlib_dotnet.dll

acanuto commented 3 years ago

Boa tarde, Segue em anexo o log como pedido PTEID_0.log

agrr commented 3 years ago

Boa tarde, ainda falta o log em DEBUG referente à aplicação de teste. Depois de ativar o modo de diagnóstico é preciso reiniciar o Test.exe e repetir a operação de leitura para termos acesso ao log de DEBUG

acanuto commented 3 years ago

Segue o log em debug, com a aplicação reiniciada PTEID_0.log pteidmdrv.log

acanuto commented 3 years ago

Boa tarde, alguma novidade em relação a está situação?

agrr commented 3 years ago

Boa tarde, conseguimos identificar um issue na "tolerância" para cartões expirados que é a causa para estas excepções na leitura de cartões expirados via SDK.

A release 3.5.0 que será lançada até ao final do mês vai conter essa correção e o prolongamento da tolerância a cartões expirados até 31 de Dezembro de acordo com o Decreto-Lei 22-A/2021.

acanuto commented 3 years ago

Bom dia, testado e a funcionar. Obrigado pela resolução do problema