Thank you for the detailed response. I was able to determine that Traefik 1.7/2.x (the renewal code is identical in both versions) will renew the cert using the same RSA secret, and in effect, retain the public key signature.
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:38:e2:a7:ed:cb:e4:b5:65:b4:83:d8:63:08:8c:f7:28:cb
Signature Algorithm: sha256WithRSAEncryption
Issuer:
commonName = Let's Encrypt Authority X3
organizationName = Let's Encrypt
countryName = US
Validity
Not Before: May 29 13:55:42 2020 GMT
Not After : Aug 27 13:55:42 2020 GMT
Subject:
commonName = domain.xyz
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:ba:43:f5:69:da:f9:8c:f8:5d:ff:82:3a:86:ef:
ba:f8:06:b4:a2:d9:b0:00:a0:ec:1f:2c:4f:ab:6e:
40:29:63:85:b0:0e:f7:c1:1e:5e:d4:73:26:9c:94:
ca:f3:75:a4:ba:ce:fe:46:d3:76:e0:9d:8e:0a:93:
dd:1b:1b:dd:26:bd:34:72:17:f7:e1:09:fa:7f:38:
52:82:6a:ee:7e:36:ea:da:0a:a4:6d:63:96:21:05:
a2:f9:4a:5f:c7:6d:da:52:5f:8a:ce:7d:2a:61:c5:
2a:d0:0b:2e:69:8e:a9:0b:aa:0d:75:57:ff:11:f3:
7a:60:17:c7:80:50:c7:24:f4:63:6b:45:a1:c6:46:
7e:b6:f1:0d:58:72:8c:e1:cd:e0:df:a0:03:eb:1e:
ff:c5:26:0c:22:8b:be:ac:a3:1f:f2:8a:2d:c3:c0:
bf:03:eb:7f:63:6d:8d:4e:5e:6c:40:30:ed:28:6b:
3b:71:c5:51:99:e9:d6:14:31:05:01:4b:7e:8b:24:
2b:43:00:6a:ea:62:37:31:d8:9d:bc:7c:f5:ed:a0:
dc:28:2c:a1:ca:d3:1e:bd:67:28:10:df:19:c8:59:
e7:34:63:e5:a0:12:58:09:60:e1:36:2f:21:db:4b:
a9:8f:d1:4c:db:bc:42:9f:32:72:87:2f:c5:3a:be:
96:3b:f2:af:ed:cd:7f:6a:c7:c5:63:05:c6:64:b9:
ca:9d:e0:ad:82:e1:94:b8:e3:43:7f:e6:ac:02:d4:
5e:34:b7:99:33:ab:a9:4d:c6:da:2f:77:1d:0f:c4:
db:3e:9d:e1:52:27:59:93:52:9b:e5:08:12:79:bc:
5a:b7:a0:d6:1f:6a:fd:5b:bf:b3:83:e2:20:36:29:
4e:56:91:b1:e5:04:91:7c:44:f1:4a:71:7f:73:d2:
dd:61:b1:63:43:a9:ac:cd:39:f9:de:27:57:5a:18:
b7:cd:4a:ad:16:b5:aa:58:fe:a7:ca:6a:bd:7c:95:
b0:33:73:07:21:a3:3c:0d:cf:74:1c:c4:60:2c:1f:
aa:7e:7d:f2:6c:d2:f9:46:7d:4e:e9:6b:e3:f7:06:
5d:0a:9c:f6:e1:f7:32:ea:74:c3:bc:b4:dc:95:b4:
21:9e:ed:55:90:36:5a:0a:eb:3d:03:b2:7d:6f:51:
92:77:43:05:97:bd:c9:b1:26:5b:5f:aa:d4:a4:43:
93:52:92:c3:f1:9c:47:e4:90:9c:dc:8c:ef:e7:f5:
a3:03:86:ed:20:2f:c9:b1:12:18:ca:87:3e:a6:e0:
c4:2f:20:13:77:b1:32:f2:ca:d5:9e:7f:6d:02:95:
0a:48:7f:6e:81:93:41:a2:fc:3f:e1:bb:34:f8:68:
84:6d:b9
initial:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:15:fb:08:38:f5:3d:55:bf:43:22:52:82:a8:92:55:3e:33
Signature Algorithm: sha256WithRSAEncryption
Issuer:
commonName = Let's Encrypt Authority X3
organizationName = Let's Encrypt
countryName = US
Validity
Not Before: May 18 16:54:26 2020 GMT
Not After : Aug 16 16:54:26 2020 GMT
Subject:
commonName = domain.xyz
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:ba:43:f5:69:da:f9:8c:f8:5d:ff:82:3a:86:ef:
ba:f8:06:b4:a2:d9:b0:00:a0:ec:1f:2c:4f:ab:6e:
40:29:63:85:b0:0e:f7:c1:1e:5e:d4:73:26:9c:94:
ca:f3:75:a4:ba:ce:fe:46:d3:76:e0:9d:8e:0a:93:
dd:1b:1b:dd:26:bd:34:72:17:f7:e1:09:fa:7f:38:
52:82:6a:ee:7e:36:ea:da:0a:a4:6d:63:96:21:05:
a2:f9:4a:5f:c7:6d:da:52:5f:8a:ce:7d:2a:61:c5:
2a:d0:0b:2e:69:8e:a9:0b:aa:0d:75:57:ff:11:f3:
7a:60:17:c7:80:50:c7:24:f4:63:6b:45:a1:c6:46:
7e:b6:f1:0d:58:72:8c:e1:cd:e0:df:a0:03:eb:1e:
ff:c5:26:0c:22:8b:be:ac:a3:1f:f2:8a:2d:c3:c0:
bf:03:eb:7f:63:6d:8d:4e:5e:6c:40:30:ed:28:6b:
3b:71:c5:51:99:e9:d6:14:31:05:01:4b:7e:8b:24:
2b:43:00:6a:ea:62:37:31:d8:9d:bc:7c:f5:ed:a0:
dc:28:2c:a1:ca:d3:1e:bd:67:28:10:df:19:c8:59:
e7:34:63:e5:a0:12:58:09:60:e1:36:2f:21:db:4b:
a9:8f:d1:4c:db:bc:42:9f:32:72:87:2f:c5:3a:be:
96:3b:f2:af:ed:cd:7f:6a:c7:c5:63:05:c6:64:b9:
ca:9d:e0:ad:82:e1:94:b8:e3:43:7f:e6:ac:02:d4:
5e:34:b7:99:33:ab:a9:4d:c6:da:2f:77:1d:0f:c4:
db:3e:9d:e1:52:27:59:93:52:9b:e5:08:12:79:bc:
5a:b7:a0:d6:1f:6a:fd:5b:bf:b3:83:e2:20:36:29:
4e:56:91:b1:e5:04:91:7c:44:f1:4a:71:7f:73:d2:
dd:61:b1:63:43:a9:ac:cd:39:f9:de:27:57:5a:18:
b7:cd:4a:ad:16:b5:aa:58:fe:a7:ca:6a:bd:7c:95:
b0:33:73:07:21:a3:3c:0d:cf:74:1c:c4:60:2c:1f:
aa:7e:7d:f2:6c:d2:f9:46:7d:4e:e9:6b:e3:f7:06:
5d:0a:9c:f6:e1:f7:32:ea:74:c3:bc:b4:dc:95:b4:
21:9e:ed:55:90:36:5a:0a:eb:3d:03:b2:7d:6f:51:
92:77:43:05:97:bd:c9:b1:26:5b:5f:aa:d4:a4:43:
93:52:92:c3:f1:9c:47:e4:90:9c:dc:8c:ef:e7:f5:
a3:03:86:ed:20:2f:c9:b1:12:18:ca:87:3e:a6:e0:
c4:2f:20:13:77:b1:32:f2:ca:d5:9e:7f:6d:02:95:
0a:48:7f:6e:81:93:41:a2:fc:3f:e1:bb:34:f8:68:
84:6d:b9
Confirmed the hashes were the same with your script, which resulted in duplicate outputs:
./extract.sh domain.xyz
CERTIFICATE NAME:
CN = domain.xyz
CERTIFICATE PUBLIC KEY HASH:
+8c/23oO5H/WMJt91rSBmxfpIqjXe8HAG8IHrzXtU0k=
I have created a fork of Traefik v2 which can be used to confirm this behavior, unfortunatly, the acme configuration handler in v1 is not as easy to manipulate as v2 so I did not have the time to experiment with that version.
You can pull this from kcmastrpc/traefik-experimental:v2-force-renew
, and adding "ForceRenew": true
as in this example:
{
"acmeresolver": {
"ForceRenew": true,
"Account": {
"Email": "kevin.crawley@containo.us",
"Registration": {
"body": {
"status": "valid",
"contact": [
"mailto:kevin.crawley@containo.us"
]
},
"uri": ""
},
"PrivateKey": "",
"KeyType": "4096"
},
"Certificates": [
{
"domain": {
"main": "domain.xyz",
"sans": []
},
"certificate": "",
"Store": "default"
}
]
}
}