Loading…
Tilbage

Profilbillede

OIOIDWS.Java (REST) reference impl. virker ikke længere

Claus Pedersen

Jeg kan ikke længere få OIOIDWS.Java (REST) reference implementationen til at virke. Jeg har lavet min egen implementation som er baseret på denne. Ca. D.15.4.2020 virkede den ikke længere. Jeg gik derfor tilbage reference implementationen og så præcis samme problem, som har været kørende det sidste halve år.

Jeg får fejlen ”org.apache.cxf.binding.soap.SoapFault: The signature or decryption was invalid” når jeg på klientsiden i ref. impl. kalder

samlToken = stsClient.requestSecurityToken(audience);

Det må være når den skal hente security token hos NEM-ID.

Er der nogen der har en ide om hvad der kan være galt. Jeg er lidt nybegynder indenfor dette område, så kan være noget helt banalt jeg har overset. Men det er som om noget er ændret i kommunikationen, da reference impl. hidtil har kørt "out of the box". 

ændret af Claus Pedersen (20.04.2020)

Hi Claus,

Det er ændringen fra SHA1 til SHA256 som driller. Derfor skal CSP laves om i certificaterne.

Jeg har prøvet at ændre CSP i certifikatet, men det virker som om at man skal gøre det i programmet. Jeg gør:

 

if (cert.PrivateKey is RSACryptoServiceProvider privKey)
{
      var exported = privKey.ToXmlString(true);var cspParams = new CspParameters
      {
           ProviderType = 24,
           ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider"
      };

      var newPrivKey = new RSACryptoServiceProvider(cspParams);
      newPrivKey.FromXmlString(exported);cert.PrivateKey = privKey;
}

Jeg ved ikke hvordan det skal gøres i Java.

Husk også at der er skiftet certifikat på STS for nogle dage siden.

Hej Mikkel

Det var STS certifikatet der skulle udskiftes. Ser ud som ændringen fra SHA1 til SHA256 er implenteret i JAVA verssionen. Så nu virker det igen.

Mange tak for hjælpen.

Mvh. Claus

Indtil DIGST får rettet OIOIDWS.Java (REST) referenceimplementationen, så er her en guide til at løse det.

Problem:
OIO IDWS.Java (REST) referenceimplementationen fejler pga. forældede certifikater for NemLog-in STS. Kald med "rest-client" fejler med "org.apache.wss4j.common.ext.WSSecurityException: The signature or decryption was invalid" ved kald til NemLog-in STS, mens rest-service fejler med "org.apache.wss4j.common.ext.WSSecurityException: SAML signature validation failed" når den modtager kald fra rest-client og validerer NemLog-in STS signaturen.

Løsning:
1. Gå til https://test-nemlog-in.dk/Testportal/ og hent "Security Token Service - signing certificate, integrationstest" (dvs. IntegrationTestSigning.zip)
2. Pak arkivet ud (indeholder filen "STS - Signature validation - test.cer")
3. Brug f.eks. https://keystore-explorer.org/ eller keytool fra JDK til at importere filen "STS - Signature validation - test.cer" som trusted certificate for følgende to keystores (password=Test1234, alias=sts, bare overskriv det eksisterende certifikat):

  • oioidws.rest/rest-service/src/main/resources/sts-trust.jks
  • oioidws.rest/rest-client/src/main/resources/trust.jks
ændret af Anders Aaberg (11.06.2020)

Mange tak for svar :-)

Jeg havde fundet ud af det du foreslår. Og REST løsningen virker fint via din guide. Men jeg mangler et tredje certiftikat til SOAP løsningen (Det andet spørgsmål jeg har stillet i forum) og det har jeg ikke kunne finde på TestPortalen. Det certifikat hedder ssl-trust.jks i løsningen og har alias 'nemlogin' . Hvis du har en ide til hvor jeg finder det, ville det være perfekt .-) Jeg har brug for begge løsninger til 2 forkellige opgaver.