Clients should accept messages secured by an expired SecurityToken#404
Open
svanharmelen wants to merge 2 commits intolocka99:masterfrom
Open
Clients should accept messages secured by an expired SecurityToken#404svanharmelen wants to merge 2 commits intolocka99:masterfrom
svanharmelen wants to merge 2 commits intolocka99:masterfrom
Conversation
7c37192 to
ebc26f8
Compare
einarmo
reviewed
Nov 11, 2024
Contributor
einarmo
left a comment
There was a problem hiding this comment.
This is clearly something we need, but I'm not entirely sold on the approach, see comments.
ebc26f8 to
6c31673
Compare
Contributor
Author
|
Updated the PR... It maybe just a little bit more involved, but it follows the spec for 100% this way. Note that I removed the |
db60783 to
e0ea0ee
Compare
e0ea0ee to
2fbf0cb
Compare
einarmo
reviewed
Nov 22, 2024
Contributor
einarmo
left a comment
There was a problem hiding this comment.
I think this is a perfectly fine solution, but see my comment on timestamps. We should strongly prefer using std time for any internal mechanisms.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I encountered a bug where an incoming message would fail with an invalid signature error. After quite some debugging I noticed this only occurred when the message was received just a few milliseconds after a security channel renewal.
After careful inspection it turned out that the message was still encrypted (which is according to spec) with the remote keys of the old security channel, but the client tried to decrypt and validate the message with the renewed keys.
According to the specs clients should accept messages secured by an expired SecurityToken for up to 25 % of the token lifetime (see https://reference.opcfoundation.org/Core/Part4/v105/docs/5.5.2 for more details), so I added a bit of logic to store the last 5 used remote keys and choose which one to use based on the token ID in the security header.
After making these changes and testing again against the same OPC UA server the issue did not occur again (while it occurred multiple times per hour before this fix was implemented) so this seems like a nice little improvement making the package a little bit more complaint.