Skip to content

Conversation

azerbe
Copy link
Contributor

@azerbe azerbe commented Aug 19, 2025

Like described in issue #7183 , this PR adds the encoding to the base64 encoded certificates.

Resolves #7183

Signed-off-by: Alexander Zerbe [email protected]

@azerbe azerbe requested a review from a team as a code owner August 19, 2025 10:53
// encodeOCSPRequest encodes the OCSP request in base64 and URL-encodes it.
// This is needed to fulfill the OCSP responder's requirements for the request format. (X.690)
func encodeOCSPRequest(reqDER []byte) string {
reqEnc := base64.StdEncoding.EncodeToString(reqDER)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be base64.RawURLEncoding.EncodeToString(...) and then you can get rid of url.QueryEscape?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was hesitant to remove the padding characters because I don't know how the decoder is implemented. It should be able to determine the correct size by measuring and rounding up, though.

However, using the URLEncoding functions definitely makes sense.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point about the padding, in which case URLEncoding should be fine indeed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will test this against our PKI first and report back.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How did it go?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not well. The PKI we use can't handle some of the options, but I'm still waiting for a response.

I also checked back with the RFC 4648 and the URLEncode is not the same like normal base64.

See https://datatracker.ietf.org/doc/html/rfc4648#section-5 for reference.

Right now I think that my first approach of using the StdEncoding (without removing padding characters) and then url.Encoding is safer. Will update this PR as soon as I get feedback from my colleagues.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I've tested all the combinations against our PKI system.

Only the 'normal' Base64 encoding, including the padding characters, worked.

Therefore, I would stick with my initial proposal to fix the bug and achieve the greatest possible compatibility with external PKI systems.

@azerbe azerbe force-pushed the fix-ocsp-url-encoding branch from be33cea to b947f4c Compare August 27, 2025 08:24
Signed-off-by: Alexander Zerbe <[email protected]>
@azerbe azerbe force-pushed the fix-ocsp-url-encoding branch from 51283e8 to 6e5d3e8 Compare August 27, 2025 08:33
@azerbe azerbe requested a review from neilalexander September 3, 2025 07:58
Copy link
Member

@neilalexander neilalexander left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks for your patience.

@neilalexander neilalexander merged commit a9b7a03 into nats-io:main Sep 9, 2025
44 of 45 checks passed
neilalexander added a commit that referenced this pull request Sep 9, 2025
Includes the following:

- #7184 

Signed-off-by: Neil Twigg <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

URL encoding for OCSP responder requests is broken
2 participants