* [PATCH proxmox-acme 0/1] fix #7749: always serialize in same order
@ 2026-07-14 9:04 Thomas Ellmenreich
2026-07-14 9:04 ` [PATCH proxmox-acme 1/1] " Thomas Ellmenreich
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Ellmenreich @ 2026-07-14 9:04 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Ellmenreich
Serializing acme responses to json, because of perls randomized hash key order,
would lead to unequal serialized responses if they were compared as bytes. By
setting "canonical => 1" the serializations now always have the same order and
can thus be compared bytewise.
I have tested the patch against a local instance of HashiCorp Vault PKI and the
EAB registration works.
It seems that "canonical" can have performance implications when serialising
larger objects, but since the objects produced in our acme client are
relatively small, I consider this acceptable.
proxmox-acme:
Thomas Ellmenreich (1):
fix #7749: always serialize in same order
src/PVE/ACME.pm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Summary over all repositories:
1 files changed, 4 insertions(+), 4 deletions(-)
--
Generated by murpp 0.12.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH proxmox-acme 1/1] fix #7749: always serialize in same order
2026-07-14 9:04 [PATCH proxmox-acme 0/1] fix #7749: always serialize in same order Thomas Ellmenreich
@ 2026-07-14 9:04 ` Thomas Ellmenreich
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Ellmenreich @ 2026-07-14 9:04 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Ellmenreich
All objects are now serialized with "canonical => 1" so that the
resulting bytes are directly comparable. Perls randomized hash key
orders lead to different serialization outputs even with the same input.
Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
---
src/PVE/ACME.pm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/PVE/ACME.pm b/src/PVE/ACME.pm
index e6fb9c2..a5287ac 100644
--- a/src/PVE/ACME.pm
+++ b/src/PVE/ACME.pm
@@ -64,9 +64,9 @@ sub encode($) { # acme requires 'base64url' encoding
return encode_base64url($_[0]);
}
-sub tojs($;%) { # shortcut for to_json with utf8=>1
+sub tojs($;%) { # shortcut for to_json with utf8=>1 and canonical=>1
my ($data, %data) = @_;
- return to_json($data, { utf8 => 1, %data });
+ return to_json($data, { utf8 => 1, canonical => 1, %data });
}
sub fromjs($) {
@@ -155,7 +155,7 @@ sub save {
}
# pretty => 1 for readability
# canonical => 1 to reduce churn
- file_set_contents($self->{path}, tojs($o, pretty => 1, canonical => 1));
+ file_set_contents($self->{path}, tojs($o, pretty => 1));
}
# Load serialized account JSON file into $self
@@ -196,7 +196,7 @@ sub jwk {
sub jwk_thumbprint {
my ($self) = @_;
my $jwk = $self->jwk(1); # $pure = 1
- return encode(sha256(tojs($jwk, canonical => 1))); # canonical sorts
+ return encode(sha256(tojs($jwk)));
}
# A key authorization string in acme is a challenge token dot-connected with
--
2.47.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-14 9:05 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 9:04 [PATCH proxmox-acme 0/1] fix #7749: always serialize in same order Thomas Ellmenreich
2026-07-14 9:04 ` [PATCH proxmox-acme 1/1] " Thomas Ellmenreich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox