Skip to content

Commit 5d0dbef

Browse files
salt: add x509 extensions to CA and leaf certificates (RFC 5280)
Add `subjectKeyIdentifier` (SKI) to all 6 CA certificates and `authorityKeyIdentifier` (AKI) to all leaf certificates via the 8 x509 signing policies, per RFC 5280: - SKI on CA certs: MUST (Section 4.2.1.2) - AKI on leaf certs: MUST (Section 4.2.1.1) - AKI on self-signed CAs: MAY be omitted (Section 4.2.1.1) The AKI keyid in leaf certs references the SKI of the issuing CA, establishing the chain of trust identifier required by the RFC. On upgrade, Salt detects the missing extensions and re-issues the certificates while preserving the existing private keys. Closes: MK8S-201
1 parent fa71615 commit 5d0dbef

File tree

9 files changed

+25
-0
lines changed

9 files changed

+25
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@
6060
- Implement ability to add certificates to fluent-bit by mounting a fluent-bit-certs secret
6161
(PR[#4812](https://github.com/scality/metalk8s/pull/4812))
6262

63+
- Add x509 `subjectKeyIdentifier` extension to CA certificates and
64+
`authorityKeyIdentifier` extension to leaf certificates per RFC 5280
65+
(PR[#4836](https://github.com/scality/metalk8s/pull/4836))
66+
6367
### Bug Fixes
6468

6569
- Fix a bug where part of the upgrade process would silently be skipped

pillar/metalk8s/roles/ca.sls

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,45 +34,53 @@ x509_signing_policies:
3434
- signing_cert: /etc/kubernetes/pki/ca.crt
3535
- keyUsage: critical digitalSignature, keyEncipherment
3636
- extendedKeyUsage: clientAuth
37+
- authorityKeyIdentifier: keyid
3738
kube_apiserver_server_policy:
3839
- minions: '*'
3940
- signing_private_key: /etc/kubernetes/pki/ca.key
4041
- signing_cert: /etc/kubernetes/pki/ca.crt
4142
- keyUsage: critical digitalSignature, keyEncipherment
4243
- extendedKeyUsage: serverAuth
44+
- authorityKeyIdentifier: keyid
4345
etcd_client_policy:
4446
- minions: '*'
4547
- signing_private_key: /etc/kubernetes/pki/etcd/ca.key
4648
- signing_cert: /etc/kubernetes/pki/etcd/ca.crt
4749
- keyUsage: critical digitalSignature, keyEncipherment
4850
- extendedKeyUsage: clientAuth
51+
- authorityKeyIdentifier: keyid
4952
etcd_server_client_policy:
5053
- minions: '*'
5154
- signing_private_key: /etc/kubernetes/pki/etcd/ca.key
5255
- signing_cert: /etc/kubernetes/pki/etcd/ca.crt
5356
- keyUsage: critical digitalSignature, keyEncipherment
5457
- extendedKeyUsage: serverAuth, clientAuth
58+
- authorityKeyIdentifier: keyid
5559
front_proxy_client_policy:
5660
- minions: '*'
5761
- signing_private_key: /etc/kubernetes/pki/front-proxy-ca.key
5862
- signing_cert: /etc/kubernetes/pki/front-proxy-ca.crt
5963
- keyUsage: critical digitalSignature, keyEncipherment
6064
- extendedKeyUsage: clientAuth
65+
- authorityKeyIdentifier: keyid
6166
ingress_server_policy:
6267
- minions: '*'
6368
- signing_private_key: /etc/metalk8s/pki/nginx-ingress/ca.key
6469
- signing_cert: /etc/metalk8s/pki/nginx-ingress/ca.crt
6570
- keyUsage: critical digitalSignature, keyEncipherment
6671
- extendedKeyUsage: serverAuth
72+
- authorityKeyIdentifier: keyid
6773
dex_server_policy:
6874
- minions: '*'
6975
- signing_private_key: /etc/metalk8s/pki/dex/ca.key
7076
- signing_cert: /etc/metalk8s/pki/dex/ca.crt
7177
- keyUsage: critical digitalSignature, keyEncipherment
7278
- extendedKeyUsage: serverAuth
79+
- authorityKeyIdentifier: keyid
7380
backup_server_policy:
7481
- minions: '*'
7582
- signing_private_key: /etc/metalk8s/pki/backup-server/ca.key
7683
- signing_cert: /etc/metalk8s/pki/backup-server/ca.crt
7784
- keyUsage: critical digitalSignature, keyEncipherment
7885
- extendedKeyUsage: serverAuth
86+
- authorityKeyIdentifier: keyid

salt/metalk8s/addons/dex/ca/installed.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Generate dex CA certificate:
2727
- CN: dex-ca
2828
- keyUsage: "critical digitalSignature, keyEncipherment, keyCertSign"
2929
- basicConstraints: "critical CA:true"
30+
- subjectKeyIdentifier: hash
3031
- days_valid: {{ dex.ca.cert.days_valid }}
3132
- user: root
3233
- group: root

salt/metalk8s/addons/nginx-ingress/ca/installed.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Generate Ingress CA certificate:
2727
- CN: ingress-ca
2828
- keyUsage: "critical digitalSignature, keyEncipherment, keyCertSign"
2929
- basicConstraints: "critical CA:true"
30+
- subjectKeyIdentifier: hash
3031
- days_valid: {{ nginx_ingress.ca.cert.days_valid }}
3132
- user: root
3233
- group: root

salt/metalk8s/backup/certs/ca.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Generate backup server CA certificate:
2727
- CN: backup-server-ca
2828
- keyUsage: "critical digitalSignature, keyEncipherment, keyCertSign"
2929
- basicConstraints: "critical CA:true"
30+
- subjectKeyIdentifier: hash
3031
- days_valid: {{ backup_server.ca.cert.days_valid }}
3132
- user: root
3233
- group: root

salt/metalk8s/kubernetes/ca/etcd/installed.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Generate etcd CA certificate:
2727
- CN: etcd-ca
2828
- keyUsage: "critical digitalSignature, keyEncipherment, keyCertSign"
2929
- basicConstraints: "critical CA:true"
30+
- subjectKeyIdentifier: hash
3031
- days_valid: {{ etcd.ca.cert.days_valid }}
3132
- user: root
3233
- group: root

salt/metalk8s/kubernetes/ca/front-proxy/installed.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Generate front proxy CA certificate:
2727
- CN: front-proxy-ca
2828
- keyUsage: "critical digitalSignature, keyEncipherment, keyCertSign"
2929
- basicConstraints: "critical CA:true"
30+
- subjectKeyIdentifier: hash
3031
- days_valid: {{ front_proxy.ca.cert.days_valid }}
3132
- user: root
3233
- group: root

salt/metalk8s/kubernetes/ca/kubernetes/installed.sls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Generate CA certificate:
2727
- CN: kubernetes
2828
- keyUsage: "critical digitalSignature, keyEncipherment, keyCertSign"
2929
- basicConstraints: "critical CA:true"
30+
- subjectKeyIdentifier: hash
3031
- days_valid: {{ ca.cert.days_valid }}
3132
- user: root
3233
- group: root

salt/tests/unit/formulas/data/base_pillar.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,42 +93,49 @@ x509_signing_policies:
9393
- signing_cert: /etc/metalk8s/pki/dex/ca.crt
9494
- keyUsage: critical digitalSignature, keyEncipherment
9595
- extendedKeyUsage: serverAuth
96+
- authorityKeyIdentifier: keyid
9697
etcd_client_policy:
9798
- minions: '*'
9899
- signing_private_key: /etc/kubernetes/pki/etcd/ca.key
99100
- signing_cert: /etc/kubernetes/pki/etcd/ca.crt
100101
- keyUsage: critical digitalSignature, keyEncipherment
101102
- extendedKeyUsage: clientAuth
103+
- authorityKeyIdentifier: keyid
102104
etcd_server_client_policy:
103105
- minions: '*'
104106
- signing_private_key: /etc/kubernetes/pki/etcd/ca.key
105107
- signing_cert: /etc/kubernetes/pki/etcd/ca.crt
106108
- keyUsage: critical digitalSignature, keyEncipherment
107109
- extendedKeyUsage: serverAuth, clientAuth
110+
- authorityKeyIdentifier: keyid
108111
front_proxy_client_policy:
109112
- minions: '*'
110113
- signing_private_key: /etc/kubernetes/pki/front-proxy-ca.key
111114
- signing_cert: /etc/kubernetes/pki/front-proxy-ca.crt
112115
- keyUsage: critical digitalSignature, keyEncipherment
113116
- extendedKeyUsage: clientAuth
117+
- authorityKeyIdentifier: keyid
114118
ingress_server_policy:
115119
- minions: '*'
116120
- signing_private_key: /etc/metalk8s/pki/nginx-ingress/ca.key
117121
- signing_cert: /etc/metalk8s/pki/nginx-ingress/ca.crt
118122
- keyUsage: critical digitalSignature, keyEncipherment
119123
- extendedKeyUsage: serverAuth
124+
- authorityKeyIdentifier: keyid
120125
kube_apiserver_client_policy:
121126
- minions: '*'
122127
- signing_private_key: /etc/kubernetes/pki/ca.key
123128
- signing_cert: /etc/kubernetes/pki/ca.crt
124129
- keyUsage: critical digitalSignature, keyEncipherment
125130
- extendedKeyUsage: clientAuth
131+
- authorityKeyIdentifier: keyid
126132
kube_apiserver_server_policy:
127133
- minions: '*'
128134
- signing_private_key: /etc/kubernetes/pki/ca.key
129135
- signing_cert: /etc/kubernetes/pki/ca.crt
130136
- keyUsage: critical digitalSignature, keyEncipherment
131137
- extendedKeyUsage: serverAuth
138+
- authorityKeyIdentifier: keyid
132139
certificates:
133140
client:
134141
files:

0 commit comments

Comments
 (0)