Hi guys

 

Recently I've been configuring James in Kubernetes deployment. 

When it comes to add certificates for James IMAP/ SMTP, I found that the
configuration requires extra step - which is not convenient for general
users:

 

In Virtual machine environment:

1.       James

-          Generate, request Certificates ( in crt + key format)

-          Use keytool to create a .jks keystore file

-          Add .jks file to config folder path.

Reference link: https://james.apache.org/server/3/config-ssl-tls.html

 

 

2.       Oher Mailing apps  (Postfix, Zimbra, Mailu,.): 

-          Generate, request Certificates ( in crt + key format)

-          Add both files to designed folder path.

Reference links: 

-          Postfix:
https://www.ssldragon.com/blog/install-an-ssl-certificate-on-postfix/ 

-          Zimbra:
https://www.thesslstore.com/knowledgebase/ssl-install/install-ssl-certificat
e-zimbra-mail-server/

 

In Kubernetes environment - ( I'm using cert-manager
<https://cert-manager.io/docs/>  to request and issue LE certificates )

 

Kubernetes manage certificates crt + key format in kind: Secret

-          apiVersion: v1

-          kind: Secret

-          metadata:

-            name: secret-tls

-          type: kubernetes.io/tls

-          data:

-            # the data is abbreviated in this example

-            tls.crt: |

-                  MIIC2DCCAcCgAwIBAgIBATANBgkqh ...

-            tls.key: |

-                  MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...

 

Other apps immediately benefits from this approach, they can simply add cert
by request Kubernetes secret:

          secret:

            items:

              - key: tls.crt

                path: cert.pem

              - key: tls.key

                path: key.pem

            secretName: mail-example-com-letsencrypt-ssl

https://vadosware.io/post/serving-email-on-kubernetes-with-mailu/

https://www.tauceti.blog/posts/run-postfix-in-kubernetes/#requesting-tls-cer
tificate

 

On the contrary, James users (me) are struggling with SSL because of JKS
format. 

The configuration is do-able but complicated for general users:

-          Extract the private key from tls.key

-          Extract the issued certificates from kind: CertifticateRequest 

-          Use openssl to create a  a KeyStore in PKCS12.

-          Use keytool to convert it to JKS

-          Add .jks file to config folder path.

https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/#download-the
-certificate-and-use-it

https://kubernetes.io/docs/reference/kubectl/jsonpath/

 

Conclusion: 

With Kubernetes and containers have become virtually synonymous with
cloud-native development, Apache James needs to adapt quickly and catch up
with others. 

JKS keystore is an old topic but I'm bringing this back because the change
is necessary.

 

Regards,

Duc Nguyen

DevOps Engineer

 

Reply via email to