Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for freezing ingress TLS secrets #14

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ source <(kubetpl completion zsh)
## ConfigMap/Secret freezing

When `kubetpl render --freeze ...` is used, kubetpl rewrites `ConfigMap`/`Secret`'s name to include hash of the content
and then updates all the references (in `Pod`s / `DaemonSet`s / `Deployment`s / `Job`s / `ReplicaSet`s / `ReplicationController`s / `StatefulSet`s / `CronJob`s) with a new value.
and then updates all the references (in `Pod`s / `DaemonSet`s / `Deployment`s / `Job`s / `ReplicaSet`s / `ReplicationController`s / `StatefulSet`s / `CronJob`s / `Ingress`s) with a new value.

For example, executing [`kubetpl render --freeze example/nginx-with-data-from-file.yml -s NAME=app -s MESSAGE=msg`](example/nginx-with-data-from-file.yml)
should produce [example/nginx-with-data-from-file.rendered+frozen.yml](example/nginx-with-data-from-file.rendered+frozen.yml#L15).
Expand Down
8 changes: 8 additions & 0 deletions engine/processor/freeze.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const (
kindReplicationController = "ReplicationController"
kindStatefulSet = "StatefulSet"
kindCronJob = "CronJob"
kindIngress = "Ingress"
)

type frozenObjectRef struct {
Expand Down Expand Up @@ -62,6 +63,9 @@ func init() {
"spec.envFrom[*].secretRef.name",
"spec.volumes[*].secret.secretName",
}
secret[kindIngress] = []string{
"spec.tls[*].secretName",
}
for _, kind := range []string{
kindDaemonSet,
kindDeployment,
Expand Down Expand Up @@ -247,6 +251,10 @@ func traverseRefs(
last := path[d+1:]
rr := []interface{}{obj}
for _, p := range strings.Split(path[0:d], "[*].") {
// Special case if there isn't a sub-key after the [*]
if strings.HasSuffix(p, "[*]") {
p = strings.TrimSuffix(p, "[*]")
}
var rn []interface{}
for _, r := range rr {
m, ok := r.(map[interface{}]interface{})
Expand Down
27 changes: 27 additions & 0 deletions example/nginx-with-data-from-file.rendered+frozen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ kind: ConfigMap
metadata:
name: app-fba46ca
---
apiVesion: v1
data:
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREVENDQWZXZ0F3SUJBZ0lKQUwvTXJjMVFJMWdNTUEwR0NTcUdTSWIzRFFFQkJRVUFNQjB4R3pBWkJnTlYKQkFNTUVuTnpiR1Y0WVcxd2JHVXVabTl2TG1OdmJUQWVGdzB4T1RBeU1EWXhNVEkxTlRsYUZ3MHlPVEF5TURNeApNVEkxTlRsYU1CMHhHekFaQmdOVkJBTU1Fbk56YkdWNFlXMXdiR1V1Wm05dkxtTnZiVENDQVNJd0RRWUpLb1pJCmh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSzNoUjZMSjBsMUJQY0pIMjVxcXVtRmx1Q1MrVGhaKzBOVDMKdzVDRDZyRXFDMTZwM0xZRWVhdjBIUEJWRzNQcGoxd2FCbEVyTFBaMmphQlR1dWtFRi81aUJTcWFDTDYwajV1WApQSVBnQUQvbTF5RGhFQWpyQTZrQTZzekhkU1U5RG44cVRuMm8zdUZXQWRqTDlxS0RMTEZRTHZRY1R1OFFSQVFXCnhZK2x3dk9ueCtZNDhad1pOcjhVQnJPcjdPR0pSZnQzeXhNd0RSSk0zemhOTXlnb1lyZTVpSzFVaVEzM2d5akMKcHE2YldUYVBtV0FxSlJyQjArYUlpZHhxMXFQL3JhYWs3d0hNWHI5clRNVWhybjhLaDlvcnFFdjl1NHBZelhaQQpRUk9MKzJhOGY0bDB0UVRZRUtsN2poYXordXlicUpIQWhGZVZlNExNMGIwempvSVFMTkVDQXdFQUFhTlFNRTR3CkhRWURWUjBPQkJZRUZKMXFKOWMwdVhnbzVKU0REWXlwL1dhcFduSERNQjhHQTFVZEl3UVlNQmFBRkoxcUo5YzAKdVhnbzVKU0REWXlwL1dhcFduSERNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQgpBS0tsV2t3ZzRqMVdvMWxKQTVqVUJQVmpieWRqc2ZCbThZK01FSUZKbWw2UTRzZUc3ekIvRzFYZWMxeGRaSmorCmZ0eVZpKzh0ZXZ6TlY2OFpNaklTNFFyN0Y4aUg4OXlwOHlSYzhMeG5ySE9lQ1NFMHNnekpuSkIvaWZRYXBxemoKdjBubHBUdmdacGF6aVdLZHEyS0VpaEZWMGdlQi9HSWFURjdPZFVKd2VFTXFYcjAxclc4NVhNZ0FvYlRjZkhlUQpHVjIxZlN3Z3VaOFdPbEJMZjdtMGc4T3NTV2ZVRUNrOHgxeGFwRERmMWJ5Q0lIT3U5T1hhZGRmMXdYUldMck9sClhiSjdZVGFITHJSNkZJckM4WURDRGlXUXN3SWpaaFdzZDFBS3h6SEMxc1dzbmhsSjZBVTgwYnNVK0dHTHhLY3kKTzB1b1dMaURSaUtxaWRuN1paM3lTUDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBcmVGSG9zblNYVUU5d2tmYm1xcTZZV1c0Skw1T0ZuN1ExUGZEa0lQcXNTb0xYcW5jCnRnUjVxL1FjOEZVYmMrbVBYQm9HVVNzczluYU5vRk82NlFRWC9tSUZLcG9JdnJTUG01YzhnK0FBUCtiWElPRVEKQ09zRHFRRHF6TWQxSlQwT2Z5cE9mYWplNFZZQjJNdjJvb01zc1ZBdTlCeE83eEJFQkJiRmo2WEM4NmZINWpqeApuQmsydnhRR3M2dnM0WWxGKzNmTEV6QU5Fa3pmT0UwektDaGl0N21JclZTSkRmZURLTUttcnB0Wk5vK1pZQ29sCkdzSFQ1b2lKM0dyV28vK3RwcVR2QWN4ZXYydE14U0d1ZndxSDJpdW9TLzI3aWxqTmRrQkJFNHY3WnJ4L2lYUzEKQk5nUXFYdU9GclA2N0p1b2tjQ0VWNVY3Z3N6UnZUT09naEFzMFFJREFRQUJBb0lCQVFDaXBqRFVYZVdoeGYxMwpWckJkcFlaaXhUdlRZeEM0aWpmZWYwVTRVYTJmdTZ5WENGMmxCZHFxdHRhN0dXRnNzL1dlT2RuZTQzeFRyK0liCkx6ZVA4SHhoUUYrRTBrR0w0bXJUS0UwN0xyWU5FR244SDR0WVRENUlRTXRpY3RGcDNBdExlTStqUyt2dzdQc2QKU08yVVp3L1BiU24rdnR3M1ZBZkxxMkZ5VmFSZk5lOUtpQW1ETVdZcXFVK01TUEtZNDhEaWY3WEZtektMczlJTQpQcEdCNEhOaGRIYk9NbHlkd3Z1amtJZGlpRWM2TmtyNnZOVmZlajlzNVYvcEc5dEhON0VidGszMFRBbzc2UHlFCit2blpRaEl1Y25Fc0RQeTM0WDZBWUtHWjVtb1dZWFVEcU1QOVp6SERDVnRjTHhSY0RiTTZydTJWbThhRlRkYmEKdWR4QmgzRGhBb0dCQU9MN203OGlETVZNRWVYczhka3VaMnhzVkloSWZhNVBZdUpUZ1I4NXdMblR3Y0tGaUY2ZAo3UW1HVjNMV2g3SDhBUEhldzdOamhZcXM2bm1tdVVhcVpJSHk4YVAxaDBRYWozNmtyaERhWXlkcmVBQmFDR2hSClIyV1NlNGQwWVM3SEN3eGVKT3VBSE0wM2kzbXorbkpqQk5XZXBaKzBFUkhob3JUN0dZOEtEdHVmQW9HQkFNUWIKeXRrWlNmbEVMR21VcmtGa3FsZzJvNjFuMXk4eHFuMXgxeFFIbGZsQ3Jadlp5V0dYc25EcjFKK2k5ZW5WSEJROQo2eElXREFSZ1VRR00zdkhQNXNVZ25FMVBDdks0OU5OUU9lU1ZJdStVbVloN1ZqUDNmempwU01hYlNyaFRWN3kxCjdZRWg3dEI3Tmtab0Y5Yi9naDFRQ1B4V3htaDlPOFIxM1BlU0RDR1BBb0dBUWtza1dQV1Q3MGZoYmxyKzQrU20KdGtjSmhXaE90TXRnNFNOc2NmZEhMNzhHTjA4UzNqZVgxSkZWRnloTEo1T25udnptQVkzT29nc1F6SWtDVWY1UQpMcGdMTlV6dnZkZFlFNi83V3RhOTRQU0ZidXpjeWNMN2JGSVZIQ0hFaElvRDB3L29EcFF6VlVpa3h0M25CdU9lCnRObUtIQlBXYkhlUE12YW5wMXhUckpjQ2dZQnhJWk5Zd0pVREhvZjhkSkErRzBPRjFpZUFUcW85aUlwUkNjNUkKdU1PVTR4bGlFalp4ZldDc2NlL2NFOWVIaUxCRklSOHQ5TmdENGtoNCszcFZ4MWphbWFCeG5NcTFFV3Z6UjVITwpReGEvWFZ0Zzk3M1lCc3cyMmFWcEpZYnFaUEgxWklKWi8yaFVqdS9WbUJGQXIyK3hWMDJIdk11QzFkUVgxdUtkClUzeDZFd0tCZ0Y3aWdzSFBxdzg4TkZzTGtUSTlqcEJRaWRta1lhdkcyaWh2REpnb2pZS1ppMnpxUWkzcUFkR0IKREFxbWg1S3hwUzZFNWdsVzdhckVuanJMdjYwQkxKdEdaRXI3MHlGanRMOUl4ZzlHM0tIU29JWTY0SFJML2Z3RworTW9wQTFuWFpMM0ZPTnhQdzFzbXdVdU5DRExpcDU2NzVCbmtjeC9tMTNRNFQ2QnZpMTlECi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
kind: Secret
metadata:
name: app-ingress-secret-c9c41f2
type: Opaque
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
Expand Down Expand Up @@ -46,3 +55,21 @@ spec:
- configMap:
name: app-fba46ca
name: app-volume
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: sslexample.foo.com
http:
paths:
- backend:
serviceName: service1
servicePort: 80
path: /
tls:
- hosts:
- sslexample.foo.com
secretName: app-ingress-secret-c9c41f2
27 changes: 27 additions & 0 deletions example/nginx-with-data-from-file.rendered.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ kind: ConfigMap
metadata:
name: app
---
apiVesion: v1
data:
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREVENDQWZXZ0F3SUJBZ0lKQUwvTXJjMVFJMWdNTUEwR0NTcUdTSWIzRFFFQkJRVUFNQjB4R3pBWkJnTlYKQkFNTUVuTnpiR1Y0WVcxd2JHVXVabTl2TG1OdmJUQWVGdzB4T1RBeU1EWXhNVEkxTlRsYUZ3MHlPVEF5TURNeApNVEkxTlRsYU1CMHhHekFaQmdOVkJBTU1Fbk56YkdWNFlXMXdiR1V1Wm05dkxtTnZiVENDQVNJd0RRWUpLb1pJCmh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSzNoUjZMSjBsMUJQY0pIMjVxcXVtRmx1Q1MrVGhaKzBOVDMKdzVDRDZyRXFDMTZwM0xZRWVhdjBIUEJWRzNQcGoxd2FCbEVyTFBaMmphQlR1dWtFRi81aUJTcWFDTDYwajV1WApQSVBnQUQvbTF5RGhFQWpyQTZrQTZzekhkU1U5RG44cVRuMm8zdUZXQWRqTDlxS0RMTEZRTHZRY1R1OFFSQVFXCnhZK2x3dk9ueCtZNDhad1pOcjhVQnJPcjdPR0pSZnQzeXhNd0RSSk0zemhOTXlnb1lyZTVpSzFVaVEzM2d5akMKcHE2YldUYVBtV0FxSlJyQjArYUlpZHhxMXFQL3JhYWs3d0hNWHI5clRNVWhybjhLaDlvcnFFdjl1NHBZelhaQQpRUk9MKzJhOGY0bDB0UVRZRUtsN2poYXordXlicUpIQWhGZVZlNExNMGIwempvSVFMTkVDQXdFQUFhTlFNRTR3CkhRWURWUjBPQkJZRUZKMXFKOWMwdVhnbzVKU0REWXlwL1dhcFduSERNQjhHQTFVZEl3UVlNQmFBRkoxcUo5YzAKdVhnbzVKU0REWXlwL1dhcFduSERNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQgpBS0tsV2t3ZzRqMVdvMWxKQTVqVUJQVmpieWRqc2ZCbThZK01FSUZKbWw2UTRzZUc3ekIvRzFYZWMxeGRaSmorCmZ0eVZpKzh0ZXZ6TlY2OFpNaklTNFFyN0Y4aUg4OXlwOHlSYzhMeG5ySE9lQ1NFMHNnekpuSkIvaWZRYXBxemoKdjBubHBUdmdacGF6aVdLZHEyS0VpaEZWMGdlQi9HSWFURjdPZFVKd2VFTXFYcjAxclc4NVhNZ0FvYlRjZkhlUQpHVjIxZlN3Z3VaOFdPbEJMZjdtMGc4T3NTV2ZVRUNrOHgxeGFwRERmMWJ5Q0lIT3U5T1hhZGRmMXdYUldMck9sClhiSjdZVGFITHJSNkZJckM4WURDRGlXUXN3SWpaaFdzZDFBS3h6SEMxc1dzbmhsSjZBVTgwYnNVK0dHTHhLY3kKTzB1b1dMaURSaUtxaWRuN1paM3lTUDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBcmVGSG9zblNYVUU5d2tmYm1xcTZZV1c0Skw1T0ZuN1ExUGZEa0lQcXNTb0xYcW5jCnRnUjVxL1FjOEZVYmMrbVBYQm9HVVNzczluYU5vRk82NlFRWC9tSUZLcG9JdnJTUG01YzhnK0FBUCtiWElPRVEKQ09zRHFRRHF6TWQxSlQwT2Z5cE9mYWplNFZZQjJNdjJvb01zc1ZBdTlCeE83eEJFQkJiRmo2WEM4NmZINWpqeApuQmsydnhRR3M2dnM0WWxGKzNmTEV6QU5Fa3pmT0UwektDaGl0N21JclZTSkRmZURLTUttcnB0Wk5vK1pZQ29sCkdzSFQ1b2lKM0dyV28vK3RwcVR2QWN4ZXYydE14U0d1ZndxSDJpdW9TLzI3aWxqTmRrQkJFNHY3WnJ4L2lYUzEKQk5nUXFYdU9GclA2N0p1b2tjQ0VWNVY3Z3N6UnZUT09naEFzMFFJREFRQUJBb0lCQVFDaXBqRFVYZVdoeGYxMwpWckJkcFlaaXhUdlRZeEM0aWpmZWYwVTRVYTJmdTZ5WENGMmxCZHFxdHRhN0dXRnNzL1dlT2RuZTQzeFRyK0liCkx6ZVA4SHhoUUYrRTBrR0w0bXJUS0UwN0xyWU5FR244SDR0WVRENUlRTXRpY3RGcDNBdExlTStqUyt2dzdQc2QKU08yVVp3L1BiU24rdnR3M1ZBZkxxMkZ5VmFSZk5lOUtpQW1ETVdZcXFVK01TUEtZNDhEaWY3WEZtektMczlJTQpQcEdCNEhOaGRIYk9NbHlkd3Z1amtJZGlpRWM2TmtyNnZOVmZlajlzNVYvcEc5dEhON0VidGszMFRBbzc2UHlFCit2blpRaEl1Y25Fc0RQeTM0WDZBWUtHWjVtb1dZWFVEcU1QOVp6SERDVnRjTHhSY0RiTTZydTJWbThhRlRkYmEKdWR4QmgzRGhBb0dCQU9MN203OGlETVZNRWVYczhka3VaMnhzVkloSWZhNVBZdUpUZ1I4NXdMblR3Y0tGaUY2ZAo3UW1HVjNMV2g3SDhBUEhldzdOamhZcXM2bm1tdVVhcVpJSHk4YVAxaDBRYWozNmtyaERhWXlkcmVBQmFDR2hSClIyV1NlNGQwWVM3SEN3eGVKT3VBSE0wM2kzbXorbkpqQk5XZXBaKzBFUkhob3JUN0dZOEtEdHVmQW9HQkFNUWIKeXRrWlNmbEVMR21VcmtGa3FsZzJvNjFuMXk4eHFuMXgxeFFIbGZsQ3Jadlp5V0dYc25EcjFKK2k5ZW5WSEJROQo2eElXREFSZ1VRR00zdkhQNXNVZ25FMVBDdks0OU5OUU9lU1ZJdStVbVloN1ZqUDNmempwU01hYlNyaFRWN3kxCjdZRWg3dEI3Tmtab0Y5Yi9naDFRQ1B4V3htaDlPOFIxM1BlU0RDR1BBb0dBUWtza1dQV1Q3MGZoYmxyKzQrU20KdGtjSmhXaE90TXRnNFNOc2NmZEhMNzhHTjA4UzNqZVgxSkZWRnloTEo1T25udnptQVkzT29nc1F6SWtDVWY1UQpMcGdMTlV6dnZkZFlFNi83V3RhOTRQU0ZidXpjeWNMN2JGSVZIQ0hFaElvRDB3L29EcFF6VlVpa3h0M25CdU9lCnRObUtIQlBXYkhlUE12YW5wMXhUckpjQ2dZQnhJWk5Zd0pVREhvZjhkSkErRzBPRjFpZUFUcW85aUlwUkNjNUkKdU1PVTR4bGlFalp4ZldDc2NlL2NFOWVIaUxCRklSOHQ5TmdENGtoNCszcFZ4MWphbWFCeG5NcTFFV3Z6UjVITwpReGEvWFZ0Zzk3M1lCc3cyMmFWcEpZYnFaUEgxWklKWi8yaFVqdS9WbUJGQXIyK3hWMDJIdk11QzFkUVgxdUtkClUzeDZFd0tCZ0Y3aWdzSFBxdzg4TkZzTGtUSTlqcEJRaWRta1lhdkcyaWh2REpnb2pZS1ppMnpxUWkzcUFkR0IKREFxbWg1S3hwUzZFNWdsVzdhckVuanJMdjYwQkxKdEdaRXI3MHlGanRMOUl4ZzlHM0tIU29JWTY0SFJML2Z3RworTW9wQTFuWFpMM0ZPTnhQdzFzbXdVdU5DRExpcDU2NzVCbmtjeC9tMTNRNFQ2QnZpMTlECi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
kind: Secret
metadata:
name: app-ingress-secret
type: Opaque
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
Expand Down Expand Up @@ -46,3 +55,21 @@ spec:
- configMap:
name: app
name: app-volume
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: sslexample.foo.com
http:
paths:
- backend:
serviceName: service1
servicePort: 80
path: /
tls:
- hosts:
- sslexample.foo.com
secretName: app-ingress-secret
27 changes: 27 additions & 0 deletions example/nginx-with-data-from-file.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ kubetpl/data-from-file:
metadata:
name: $NAME
---
apiVesion: v1
kind: Secret
metadata:
name: $NAME-ingress-secret
type: Opaque
kubetpl/data-from-file:
- tls.key
- tls.crt
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
Expand Down Expand Up @@ -44,3 +53,21 @@ spec:
- configMap:
name: $NAME
name: $NAME-volume
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: $NAME-ingress
spec:
tls:
- hosts:
- sslexample.foo.com
secretName: $NAME-ingress-secret
rules:
- host: sslexample.foo.com
http:
paths:
- path: /
backend:
serviceName: service1
servicePort: 80
19 changes: 19 additions & 0 deletions example/tls.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDDTCCAfWgAwIBAgIJAL/Mrc1QI1gMMA0GCSqGSIb3DQEBBQUAMB0xGzAZBgNV
BAMMEnNzbGV4YW1wbGUuZm9vLmNvbTAeFw0xOTAyMDYxMTI1NTlaFw0yOTAyMDMx
MTI1NTlaMB0xGzAZBgNVBAMMEnNzbGV4YW1wbGUuZm9vLmNvbTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAK3hR6LJ0l1BPcJH25qqumFluCS+ThZ+0NT3
w5CD6rEqC16p3LYEeav0HPBVG3Ppj1waBlErLPZ2jaBTuukEF/5iBSqaCL60j5uX
PIPgAD/m1yDhEAjrA6kA6szHdSU9Dn8qTn2o3uFWAdjL9qKDLLFQLvQcTu8QRAQW
xY+lwvOnx+Y48ZwZNr8UBrOr7OGJRft3yxMwDRJM3zhNMygoYre5iK1UiQ33gyjC
pq6bWTaPmWAqJRrB0+aIidxq1qP/raak7wHMXr9rTMUhrn8Kh9orqEv9u4pYzXZA
QROL+2a8f4l0tQTYEKl7jhaz+uybqJHAhFeVe4LM0b0zjoIQLNECAwEAAaNQME4w
HQYDVR0OBBYEFJ1qJ9c0uXgo5JSDDYyp/WapWnHDMB8GA1UdIwQYMBaAFJ1qJ9c0
uXgo5JSDDYyp/WapWnHDMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
AKKlWkwg4j1Wo1lJA5jUBPVjbydjsfBm8Y+MEIFJml6Q4seG7zB/G1Xec1xdZJj+
ftyVi+8tevzNV68ZMjIS4Qr7F8iH89yp8yRc8LxnrHOeCSE0sgzJnJB/ifQapqzj
v0nlpTvgZpaziWKdq2KEihFV0geB/GIaTF7OdUJweEMqXr01rW85XMgAobTcfHeQ
GV21fSwguZ8WOlBLf7m0g8OsSWfUECk8x1xapDDf1byCIHOu9OXaddf1wXRWLrOl
XbJ7YTaHLrR6FIrC8YDCDiWQswIjZhWsd1AKxzHC1sWsnhlJ6AU80bsU+GGLxKcy
O0uoWLiDRiKqidn7ZZ3ySP0=
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions example/tls.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAreFHosnSXUE9wkfbmqq6YWW4JL5OFn7Q1PfDkIPqsSoLXqnc
tgR5q/Qc8FUbc+mPXBoGUSss9naNoFO66QQX/mIFKpoIvrSPm5c8g+AAP+bXIOEQ
COsDqQDqzMd1JT0OfypOfaje4VYB2Mv2ooMssVAu9BxO7xBEBBbFj6XC86fH5jjx
nBk2vxQGs6vs4YlF+3fLEzANEkzfOE0zKChit7mIrVSJDfeDKMKmrptZNo+ZYCol
GsHT5oiJ3GrWo/+tpqTvAcxev2tMxSGufwqH2iuoS/27iljNdkBBE4v7Zrx/iXS1
BNgQqXuOFrP67JuokcCEV5V7gszRvTOOghAs0QIDAQABAoIBAQCipjDUXeWhxf13
VrBdpYZixTvTYxC4ijfef0U4Ua2fu6yXCF2lBdqqtta7GWFss/WeOdne43xTr+Ib
LzeP8HxhQF+E0kGL4mrTKE07LrYNEGn8H4tYTD5IQMtictFp3AtLeM+jS+vw7Psd
SO2UZw/PbSn+vtw3VAfLq2FyVaRfNe9KiAmDMWYqqU+MSPKY48Dif7XFmzKLs9IM
PpGB4HNhdHbOMlydwvujkIdiiEc6Nkr6vNVfej9s5V/pG9tHN7Ebtk30TAo76PyE
+vnZQhIucnEsDPy34X6AYKGZ5moWYXUDqMP9ZzHDCVtcLxRcDbM6ru2Vm8aFTdba
udxBh3DhAoGBAOL7m78iDMVMEeXs8dkuZ2xsVIhIfa5PYuJTgR85wLnTwcKFiF6d
7QmGV3LWh7H8APHew7NjhYqs6nmmuUaqZIHy8aP1h0Qaj36krhDaYydreABaCGhR
R2WSe4d0YS7HCwxeJOuAHM03i3mz+nJjBNWepZ+0ERHhorT7GY8KDtufAoGBAMQb
ytkZSflELGmUrkFkqlg2o61n1y8xqn1x1xQHlflCrZvZyWGXsnDr1J+i9enVHBQ9
6xIWDARgUQGM3vHP5sUgnE1PCvK49NNQOeSVIu+UmYh7VjP3fzjpSMabSrhTV7y1
7YEh7tB7NkZoF9b/gh1QCPxWxmh9O8R13PeSDCGPAoGAQkskWPWT70fhblr+4+Sm
tkcJhWhOtMtg4SNscfdHL78GN08S3jeX1JFVFyhLJ5OnnvzmAY3OogsQzIkCUf5Q
LpgLNUzvvddYE6/7Wta94PSFbuzcycL7bFIVHCHEhIoD0w/oDpQzVUikxt3nBuOe
tNmKHBPWbHePMvanp1xTrJcCgYBxIZNYwJUDHof8dJA+G0OF1ieATqo9iIpRCc5I
uMOU4xliEjZxfWCsce/cE9eHiLBFIR8t9NgD4kh4+3pVx1jamaBxnMq1EWvzR5HO
Qxa/XVtg973YBsw22aVpJYbqZPH1ZIJZ/2hUju/VmBFAr2+xV02HvMuC1dQX1uKd
U3x6EwKBgF7igsHPqw88NFsLkTI9jpBQidmkYavG2ihvDJgojYKZi2zqQi3qAdGB
DAqmh5KxpS6E5glW7arEnjrLv60BLJtGZEr70yFjtL9Ixg9G3KHSoIY64HRL/fwG
+MopA1nXZL3FONxPw1smwUuNCDLip5675Bnkcx/m13Q4T6Bvi19D
-----END RSA PRIVATE KEY-----