signedxml icon indicating copy to clipboard operation
signedxml copied to clipboard

unable to find refereced xml

Open greenpau opened this issue 5 years ago • 2 comments

An attempt to sign the following response fails with unable to find refereced xml.

Relevant code follows:

func getSigningKey(fp string) (*rsa.PrivateKey, error) {
    fileContent, err := ioutil.ReadFile(fp)
    if err != nil {
        return nil, err
    }
    block, _ := pem.Decode(fileContent)
    if block == nil || block.Type != "RSA PRIVATE KEY" {
        return nil, fmt.Errorf("failed to decode PEM block containing RSA PRIVATE KEY")
    }
    key, err := x509.ParsePKCS1PrivateKey(block.Bytes)
    if err != nil {
        return nil, err
    }
    return key, nil
}

...

    // XML Signing
    signingKey, err := getSigningKey("assets/idp/azure_ad_app_signing_pkcs1_key.pem")
    if err != nil {
        t.Fatalf("error parsing signing key: %s", err)
    }
    signer, err := signedxml.NewSigner(authRequestPayloadPlain.String())
    if err != nil {
        t.Fatalf("error initializing XML signer: %s", err)
    }
    signedAuthRequestPayloadPlain, err := signer.Sign(signingKey)
    if err != nil {
        t.Fatalf("error signing XML doc: %s", err)
    }


 <samlp:Response ID="_9eefb041-27fe-4014-bf4b-932cd5f7f5d5" Version="2.0" IssueInstant="2020-04-21T04:44:24.286Z" Destination="https://127.0.0.1:3443/saml" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
          <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/1b9e886b-8ff2-4378-b6c8-6771259a5f51/</Issuer>
          <samlp:Status>
            <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
          </samlp:Status>
          <Assertion ID="_7298c1f7-4411-4bc6-b8e4-77622e935418" IssueInstant="2020-04-21T04:44:23.125Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
            <Issuer>https://sts.windows.net/1b9e886b-8ff2-4378-b6c8-6771259a5f51/</Issuer>
            <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
              <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
                <Reference URI="#_0369ee56-8152-4f92-b8c3-e1481fe74300">
                  <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                    <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                  </Transforms>
                  <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                  <DigestValue>asdf</DigestValue>
                </Reference>
              </SignedInfo>
              <SignatureValue>asdf</SignatureValue>
            </Signature>
            <Subject>
              <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">[email protected]</NameID>
              <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <SubjectConfirmationData NotOnOrAfter="2020-04-21T05:44:28.208Z" Recipient="https://127.0.0.1:3443/saml"/>
              </SubjectConfirmation>
            </Subject>
            <Conditions NotBefore="2020-04-21T04:39:28.099Z" NotOnOrAfter="2020-04-21T05:44:28.208Z">
              <AudienceRestriction>
                        <Audience>urn:caddy:mygatekeeper</Audience>
              </AudienceRestriction>
            </Conditions>
            <AttributeStatement>
              <Attribute Name="http://schemas.microsoft.com/identity/claims/tenantid">
                <AttributeValue>1b9e886b-8ff2-4378-b6c8-6771259a5f51</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
                <AttributeValue>158d7011-cfd7-41b8-b456-8a8264ac5a04</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.microsoft.com/identity/claims/displayname">
                <AttributeValue>Greenberg, Paul</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.microsoft.com/identity/claims/identityprovider">
                <AttributeValue>https://sts.windows.net/1b9e886b-8ff2-4378-b6c8-6771259a5f51/</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.microsoft.com/claims/authnmethodsreferences">
                <AttributeValue>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AttributeValue>
                <AttributeValue>http://schemas.microsoft.com/claims/multipleauthn</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/role">
                <AttributeValue>AzureAD_Editor</AttributeValue>
                <AttributeValue>AzureAD_Viewer</AttributeValue>
                <AttributeValue>AzureAD_Administrator</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname">
                <AttributeValue>Paul</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname">
                <AttributeValue>Greenberg</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
                <AttributeValue>[email protected]</AttributeValue>
              </Attribute>
              <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
                <AttributeValue>[email protected]</AttributeValue>
              </Attribute>
              <Attribute Name="http://claims.contoso.com/SAML/Attributes/RoleSessionName">
                <AttributeValue>[email protected]</AttributeValue>
              </Attribute>
              <Attribute Name="http://claims.contoso.com/SAML/Attributes/Role">
                <AttributeValue>AzureAD_Editor</AttributeValue>
                <AttributeValue>AzureAD_Viewer</AttributeValue>
                <AttributeValue>AzureAD_Administrator</AttributeValue>
              </Attribute>
              <Attribute Name="http://claims.contoso.com/SAML/Attributes/MaxSessionDuration">
                <AttributeValue>3600</AttributeValue>
              </Attribute>
            </AttributeStatement>
            <AuthnStatement AuthnInstant="2020-04-21T05:44:28.358Z" SessionIndex="_7298c1f7-4411-4bc6-b8e4-77622e935418">
              <AuthnContext>
                <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthnContextClassRef>
              </AuthnContext>
            </AuthnStatement>
          </Assertion>
        </samlp:Response>

greenpau avatar Apr 21 '20 04:04 greenpau

It looks like the issue is with the sample XML you provided. There isn't an ID anywhere in the document that matches the Reference URI (_0369ee56-8152-4f92-b8c3-e1481fe74300).

ma314smith avatar May 06 '20 21:05 ma314smith

@ma314smith , thank you! :+1: I found an open PR and thought it was relevant, but never got back to it :-(

greenpau avatar May 06 '20 23:05 greenpau

@greenpau were you able to resolve this? Or is it still an open issue?

adamdecaf avatar Apr 21 '23 18:04 adamdecaf