difi / oppslagstjeneste-klient-dotnet

.Net klient for integrasjon mot Oppslagstjenesten for kontakt og reservasjonregisteret
https://samarbeid.difi.no/kontakt-og-reservasjonsregisteret
6 stars 6 forks source link

Angitt sertifikat med fingeravtrykk xxxx kan ikke eksporteres #35

Closed johnviggo closed 8 years ago

johnviggo commented 8 years ago

Hei

Har oppdatert til siste versjon nå etter rettingen som ble gjort før helga. Nå får jeg ikke NullReferenceException lenger, men følgende feil:

Angitt sertifikat med fingeravtrykk CE5E1B25BF811536B9833BA1EDD90F05519A4C72 kan ikke eksporteres. Det er nødvendig når sertifikatet ikke er opprettet med 'Microsoft Enhanced RSA and AES Cryptographic Provider' som CryptoAPI provider name (-sp parameter i makecert.exe eller -csp parameter i openssl).

Koden som brukes: https://gist.github.com/johnviggo/0f4cbf636307b547b764

johnviggo commented 8 years ago

Vet ikke om det har noe med saken å gjøre, men forsøkte å sette X509KeyStorageFlags.Exportable på X509Certificate2-objektet, men nå får jeg {"Object reference not set to an instance of an object."} igjen.

System.NullReferenceException was unhandled HResult=-2147467261 Message=Object reference not set to an instance of an object. Source=Difi.Oppslagstjeneste.Klient StackTrace: at Difi.Oppslagstjeneste.Klient.OppslagstjenesteKlient.SendEnvelope(AbstractEnvelope envelope) at Difi.Oppslagstjeneste.Klient.OppslagstjenesteKlient.HentPersoner(String[] personidentifikator, Informasjonsbehov informasjonsbehov) at Hemit.BizTalk.DifiTest.Program.Main(String[] args) in c:\VSOTFS\BizTalk\Development\jogr\Hemit.BizTalk.DifiSikkerPost\Hemit.BizTalk.DifiSikkerPost\Program.cs:line 19 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

asjafjell commented 8 years ago

Husket du å huke av for Mark this key as exportable, slik som guiden sier her, når du la inn sertifikatet?

johnviggo commented 8 years ago

Har prøvd flere ganger nå @asjafjell. Har fjernet det og lagt det inn på nytt ett par ganger.

Om jeg bruke thumbprint direkte får jeg {"Object reference not set to an instance of an object."}.

Om jeg bruker X509Certificate2 får jeg "Angitt sertifikat med fingeravtrykk xxxx kan ikke eksporteres". Setter jeg X509KeyStorageFlags.Exportable på X509Certificate2-objektet får jeg "Object reference not set.." på denne også.

Fikk "Får ikke kontakt med Oppslagstjenesten. Sjekk tilkoblingsdetaljer og prøv på nytt." ett par ganger, men det har ordnet seg så nå er jeg tilbake på "Object reference not set..."

asjafjell commented 8 years ago

Det kan være forskjellige årsaker til problemene, men det du må få fikset først er lesing av sertifikater. Du skal ikke sette exportable-flagget i kode om du importerer med thumbprint. Husk at om du kopierer thumbprint fra MMC, så må du fjerne den usynlige Byte Order Mark (BOM), som er først i strengen. dette gjør du ved å ta backspace eller delete i starten, men pass på så du ikke sletter det første synlige tegnet.

johnviggo commented 8 years ago

Setter kun exportable-flagget om jeg sender inn X509Cetificate2 til OppslagstjenesteKlient.

Om jeg sender inn thumbprint har jeg ikke noe sted å sette dette. Jeg kan alltis prøve å få lagt inn sertfifikat på nytt, men "Object reference not set..." sier meg så lite om hva som er galt.

Jeg får fint eksportert sertifikatet fra MMC om jeg prøver det manuelt, så eksport skal fungere fint.

Mht. bom så fikk jeg feil på dette tidligere (Additional information: Klarte ikke finne sertifikat med thumbprint: ‎ce 5e 1b 25 bf 81 15 36 b9 83 3b a1 ed d9 0f 05 51 9a 4c 72), men det er rettet.

johnviggo commented 8 years ago

Prøvde meg på fjerne sertifikatet og importere det UTEN å hake av for at det skal kunne eksporteres nå og nå får jeg "Angitt sertifikat med fingeravtrykk CE5E1B25BF811536B9833BA1EDD90F05519A4C72 kan ikke eksporteres" også om jeg sender inn thumbprint.

Så import av sertifikat var ok. Den finner altså sertifikat, men så feiler ett eller annet etterpå som gir object reference-feilen.

Sånn sett så er overskriften på denne posten feil, da jeg ikke får denne meldingen lenger. Vet ikke om du vil lukke og åpne en ny for "Object reference not set..."?

asjafjell commented 8 years ago

Object reference not set betyr at den ikke finner sertifikatet i certificate store. For at klientbiblioteket skal kunne bruke sertifikatet, må det ha satt exportable-flagget når du importerer.

Husk at du også må velge rett store, som også beskrevet i dokumentasjonen.Om du følger den til punkt og prikke, så skal det fungere. Om det ikke fungerer så må du nesten feilsøke litt på egenhånd. Det kan være en idé å laste inn sertifikatet uten å bruke klientbiblioteket. Du kan starte på denne tråden på Stack Overflow og se om det fører noen vei.

johnviggo commented 8 years ago

Ikke noe problem å hente sertifikat med thumbprint.

Her er hele koden jeg testet med nå:

https://gist.github.com/johnviggo/a1c7de42db9dc5274ea0

Resultatet fra consolapplikasjonen:

Henter cert med thumbprint ce5e1b25bf811536b9833ba1edd90f05519a4c72 Sertifikat for thumbprint ce5e1b25bf811536b9833ba1edd90f05519a4c72 funnet: ST OL AVS HOSPITAL HF OppslagstjenesteKlient.HentPersoner med thumbprint ce5e1b25bf811536b9833ba1edd90 f05519a4c72

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. at Difi.Oppslagstjeneste.Klient.OppslagstjenesteKlient.SendEnvelope(AbstractE nvelope envelope) at Difi.Oppslagstjeneste.Klient.OppslagstjenesteKlient.HentPersoner(String[] personidentifikator, Informasjonsbehov informasjonsbehov) at Hemit.BizTalk.DifiTest.Program.HentPersoner(String personNummer) in c:\VSO TFS\BizTalk\Development\jogr\Hemit.BizTalk.DifiSikkerPost\Hemit.BizTalk.DifiSikk erPost\Program.cs:line 48 at Hemit.BizTalk.DifiTest.Program.Main(String[] args) in c:\VSOTFS\BizTalk\De velopment\jogr\Hemit.BizTalk.DifiSikkerPost\Hemit.BizTalk.DifiSikkerPost\Program .cs:line 38

asjafjell commented 8 years ago

Jeg forstod det slik at du ikke fikk til å laste sertifikatet med thumbrint, men nå er det problemet løst, og nå har du det samme problemet som opprinnelig? Kan noen i Difi sjekke om svaret på responsen er Ok eller Feilet, @aberner? Enten er det noe vi ikke håndterer i klientbibiloteket, eller så er det noe med oppsettet for avsender.

johnviggo commented 8 years ago

Problemet var vel at jeg ikke visste hva som var galt pga. at feilemeldinge nå bare er en object reference-feil. Jeg fikk problemer med å hente med thumbprint da jeg slettet sertifikatet og la det inn uten å hake av for at det skulle være mulig å eksportere. Det var bare en test for å se at jeg hadde gjort det riktig ved importering av sert tidligere.

Den opprinnelige feilen mht ekportering ble ok ved å bruke X509KeyStorageFlags.Exportable. Men nå holder jeg meg til thumbprint helt til jeg faktisk får en OK respons fra oppslagstjenesten.

Så for å oppsummere så får jeg samme feil (System.NullReferenceException: Object reference not set to an instance of an object.) om jeg sender inn thumbprint eller X509Certificate2 til OppslagstjenesteKlient.

Hele exception:

System.NullReferenceException was unhandled HResult=-2147467261 Message=Object reference not set to an instance of an object. Source=Difi.Oppslagstjeneste.Klient StackTrace: at Difi.Oppslagstjeneste.Klient.OppslagstjenesteKlient.SendEnvelope(AbstractEnvelope envelope) at Difi.Oppslagstjeneste.Klient.OppslagstjenesteKlient.HentPersoner(String[] personidentifikator, Informasjonsbehov informasjonsbehov) at Hemit.BizTalk.DifiTest.Program.HentPersoner(String personNummer) in c:\VSOTFS\BizTalk\Development\jogr\Hemit.BizTalk.DifiSikkerPost\Hemit.BizTalk.DifiSikkerPost\Program.cs:line 48 at Hemit.BizTalk.DifiTest.Program.Main(String[] args) in c:\VSOTFS\BizTalk\Development\jogr\Hemit.BizTalk.DifiSikkerPost\Hemit.BizTalk.DifiSikkerPost\Program.cs:line 38 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

asjafjell commented 8 years ago

Den er god. Det blir veldig vanskelig for oss å forstå hva problemet når du starter å endre innstillinger på sertifikatlasting. Klarer du å hente sertifikat (uansett måte) og du har satt exportable, så er den biten ok så lenge sertifikatet ikke er null. Da er det ikke vits å endre på hvordan du laster det når noe annet feiler. Et sertifikat er et sertifikat.

Når det er sagt så kan det hende at jeg har funnet en kilde til hvorfor du fortsatt får null pointer. Jeg skal debugge litt mer for å se hva som er årsaken.

asjafjell commented 8 years ago

Feilen som ble opplevd var urelatert til ditt problem, så er ikke nærmere en løsning her. Venter fortsatt svar fra @aberner her, for vi klarer ikke reprodusere dette.

joergenb commented 8 years ago

Klarer ikkje finne spor av orgno. 883974832 i logger, så mulig det feiler før vi begynner å sjå på sertifikatet på vår side. Eg finn både 200 og 400 status-kode på v5-endepunktet i VER2 idag, men det er fordelt på fleire ulike IP-addresser og .net-klientbibliotek-versjoner, så usikker på kven at dei som faktisk tilhøyrer @johnviggo

johnviggo commented 8 years ago

Jeg har prøvd å sette noe på alt i OppslagstjenesteKlient som sto til null, bare for å prøve noe, men det hadde dessverre ingen effekt.

Min IP utad bør være 91.186.72.51. Jeg kjører 10 spørringer nå kl 09:05, så kanskje det er mulig å se noe i loggen.

joergenb commented 8 years ago

Kl 08:46 og 08:48 ser eg 2 vellukka spørringer frå den IPen. Alt fremstår som OK her, så får du fremdeles feil? Dette er dei einaste oppslaga til no idag, dvs ingenting 09:05.

johnviggo commented 8 years ago

Merkelig. Har aldri fått noe annet enn feil på min side. Får fremdeles System.NullReferenceException.

For noen dager siden fikk jeg også 4-5 "Får ikke kontakt med Oppslagstjenesten. Sjekk tilkoblingsdetaljer og prøv på nytt.". Kanskje det hjelper dere å spisse litt mer hvor NullReferenceException oppstår?

johnviggo commented 8 years ago

Nå funker det faktisk! Fikk tilbake en person når jeg testet akkurat nå.

Eller rettere sagt fikk status "IKKE_REGISTERERT" som er naturlig med det fødselsnummeret. @asjafjell @joergenb

Fant dere noe feil?

johnviggo commented 8 years ago

Meeen nå er jeg tilbake på ObjectReference-feil igjen :(

asjafjell commented 8 years ago

Hva gjorde du for å få det til å fungere, og hva endret du når du fikk null-referanse?

johnviggo commented 8 years ago

Nå fant jeg ut hvorfor jeg fikk det til å fungere ett par ganger. Når Fiddler kjører så fungerer det pga. at jeg trykker ja på denne feilmeldingen som kommer i fiddler:

Session #30: The server (kontaktinfo-ws-ver2.difi.no) presented a certificate that did not validate, due to RemoteCertificateChainErrors.

0 - A certificate chain could not be built to a trusted root authority.

ISSUER: CN=COMODO RSA Domain Validation Secure Server CA, O=COMODO CA Limited, L=Salford, S=Greater Manchester, C=GB

Det ser altså ut som jeg mangler ett sertifikat?

johnviggo commented 8 years ago

Sertifikatet her har vel gått ut nå, men det skulle det vel ikke ha før kl 12 i går såvidt jeg vet, og hadde samme feil da. Skal se om jeg får tak på det nye sertifikatet. Det så ut som jeg måtte signere noe med bank-id sist jeg sjekket og det ga da bare feilmelding.

johnviggo commented 8 years ago

Har oppdatert sertifikatet nå, men får fremdeles samme feil uten at Fiddler er åpen å lar meg ignorere chain-feilen.

aberner commented 8 years ago

Comodo sertifikatet er knyttet til SSL oppkoblingen og er ikke det samme som Virksomhetssertifikatet fra Buypass.

Du må jo legge inn trust på ssl sertifikatet. Er ikke ca'n til comodo lagt inn hos deg må du gjøre det.

johnviggo commented 8 years ago

Den ca'n var ikke lagt inn.

Har ordnet det nå og nå fungerer det endelig.

asjafjell commented 8 years ago

Så bra at det ordnet seg. Jeg lukker denne.

aberner commented 8 years ago

Da lærte vi at vi bør dokumentere at også SSL sertifikatet må stoles på selvsagt. Dette er ikke noe som vil bli levert med klientbiblioteket men forventes at alle har en tillit til.

johnviggo commented 8 years ago

Har dere noen formening om når V5 kommer ut av beta?