diff --git a/goKMS/kms/akms/client/client.go b/goKMS/kms/akmsInterface/client/client.go
similarity index 57%
rename from goKMS/kms/akms/client/client.go
rename to goKMS/kms/akmsInterface/client/client.go
index 6a1a075761dbf0bbed68da123d31398447fe8dda..703912a8bfb1e00401956df94ab9f0663bcc6e46 100644
--- a/goKMS/kms/akms/client/client.go
+++ b/goKMS/kms/akmsInterface/client/client.go
@@ -3,20 +3,39 @@ package client
 import (
 	"bytes"
 	"encoding/json"
+	"fmt"
+	"io"
 	"net/http"
 
+	"code.fbi.h-da.de/danet/quant/goKMS/config"
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/crypto"
+	kmstls "code.fbi.h-da.de/danet/quant/goKMS/kms/tls"
 	"github.com/sirupsen/logrus"
 )
 
 type CkmsAkmsClient struct {
-	url string
+	url        string
+	httpClient *http.Client
 }
 
-func NewCkmsAkmsClient(url string) *CkmsAkmsClient {
-	return &CkmsAkmsClient{
-		url: url,
+func NewCkmsAkmsClient(url string, tlsConfig config.TLSConfig) (*CkmsAkmsClient, error) {
+	client := &http.Client{}
+
+	if tlsConfig.Active {
+		tlsConf, err := kmstls.GenerateTLSLibraryConfig(tlsConfig)
+		if err != nil {
+			return nil, fmt.Errorf("unable to generate TLS config: %w", err)
+		}
+
+		client.Transport = &http.Transport{
+			TLSClientConfig: tlsConf,
+		}
 	}
+
+	return &CkmsAkmsClient{
+		url:        url,
+		httpClient: client,
+	}, nil
 }
 
 type PushKSAKeyRequest struct {
@@ -38,9 +57,14 @@ func (c *CkmsAkmsClient) SendKSAKeysToRequestingInstances(requestID string, proc
 		return err
 	}
 
-	resp, err := http.Post(c.url, "application/json", bytes.NewBuffer(jsonData))
+	// TODO: also log the response body if request failed
+	resp, err := c.httpClient.Post(c.url, "application/json", bytes.NewBuffer(jsonData))
 	if err != nil {
-		logrus.Errorf("Error sending POST request: %s", err)
+		body, err2 := io.ReadAll(resp.Body)
+		if err2 != nil {
+			logrus.Errorf("Error reading POST response body: %s", err2)
+		}
+		logrus.Errorf("Error sending POST request: %s, received response body: %s", err, string(body))
 		logrus.Errorf("Tried to send request: %s to url: %s", jsonData, c.url)
 		return err
 	}
diff --git a/goKMS/kms/akms/server/server.go b/goKMS/kms/akmsInterface/server/server.go
similarity index 87%
rename from goKMS/kms/akms/server/server.go
rename to goKMS/kms/akmsInterface/server/server.go
index 76e7e439053275d5d67aedec5f8b582a5d639d79..04698dabcfa121876169d828252c8a48d4281f4c 100644
--- a/goKMS/kms/akms/server/server.go
+++ b/goKMS/kms/akmsInterface/server/server.go
@@ -6,8 +6,10 @@ import (
 	"net/http"
 	"time"
 
+	"code.fbi.h-da.de/danet/quant/goKMS/config"
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/event"
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/receiver"
+	kmstls "code.fbi.h-da.de/danet/quant/goKMS/kms/tls"
 	"github.com/google/uuid"
 	"github.com/sirupsen/logrus"
 )
@@ -16,7 +18,7 @@ type AKMSReceiverServer struct {
 	server *http.Server
 }
 
-func NewAKMSReceiver(port string, eventBus *event.EventBus, receiver *receiver.Receiver, generateAndSend func(string, uuid.UUID, string, int) error) *AKMSReceiverServer {
+func NewAKMSReceiver(port string, eventBus *event.EventBus, receiver *receiver.Receiver, generateAndSend func(string, uuid.UUID, string, int) error, tlsConfig config.TLSConfig) (*AKMSReceiverServer, error) {
 	router := http.NewServeMux()
 
 	router.HandleFunc("/api/v1/keys/ksa_key_req", ksaReqHandler(eventBus, receiver, generateAndSend))
@@ -26,11 +28,19 @@ func NewAKMSReceiver(port string, eventBus *event.EventBus, receiver *receiver.R
 		Handler: router,
 	}
 
+	if tlsConfig.Active {
+		tlsLibraryConfig, err := kmstls.GenerateServerTLSLibraryConfig(tlsConfig)
+		if err != nil {
+			return nil, fmt.Errorf("unable to generate TLS config: %w", err)
+		}
+		server.TLSConfig = tlsLibraryConfig
+	}
+
 	AKMSReceiver := &AKMSReceiverServer{
 		server: server,
 	}
 
-	return AKMSReceiver
+	return AKMSReceiver, nil
 }
 
 func (akmsReceiver *AKMSReceiverServer) Serve() {
diff --git a/goKMS/kms/kms.go b/goKMS/kms/kms.go
index 1ade908b7c350f9be0f039039ad9051be21d83eb..4b7cb5f2a2bde5aeaddbfc11082c9e4bea132084 100644
--- a/goKMS/kms/kms.go
+++ b/goKMS/kms/kms.go
@@ -21,8 +21,8 @@ import (
 
 	pbIC "code.fbi.h-da.de/danet/quant/goKMS/api/gen/proto/go/kmsintercom"
 	"code.fbi.h-da.de/danet/quant/goKMS/config"
-	akmsClient "code.fbi.h-da.de/danet/quant/goKMS/kms/akms/client"
-	akmsServer "code.fbi.h-da.de/danet/quant/goKMS/kms/akms/server"
+	akmsInterfaceClient "code.fbi.h-da.de/danet/quant/goKMS/kms/akmsInterface/client"
+	akmsInterfaceServer "code.fbi.h-da.de/danet/quant/goKMS/kms/akmsInterface/server"
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/crypto"
 	etsi14Server "code.fbi.h-da.de/danet/quant/goKMS/kms/etsi/etsi14/server"
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/event"
@@ -82,8 +82,8 @@ type KMS struct {
 	eventBus            *event.EventBus
 	receiver            *receiver.Receiver
 	// Akms things
-	ckmsAkmsClient *akmsClient.CkmsAkmsClient
-	ckmsAkmsServer *akmsServer.AKMSReceiverServer
+	ckmsAkmsClient *akmsInterfaceClient.CkmsAkmsClient
+	ckmsAkmsServer *akmsInterfaceServer.AKMSReceiverServer
 	// ETSI14 Server things
 	etsi14Server    *etsi14Server.ETSI14RESTService
 	keyStoreChannel chan []crypto.KSAKey
@@ -118,9 +118,13 @@ func NewKMS(kmsUUID uuid.UUID, logOutput io.Writer, logLevel log.Level, logInJso
 		log.SetReportCaller(false)
 	}
 
-	var ckmsAkmsClient *akmsClient.CkmsAkmsClient
+	var ckmsAkmsClient *akmsInterfaceClient.CkmsAkmsClient
+	var err error
 	if config.AkmsURL != "" {
-		ckmsAkmsClient = akmsClient.NewCkmsAkmsClient(config.AkmsURL)
+		ckmsAkmsClient, err = akmsInterfaceClient.NewCkmsAkmsClient(config.AkmsURL, config.AkmsCkmsTLS)
+		if err != nil {
+			log.Fatalf("Failed to setup CkmsAkmsClient: %s", err)
+		}
 	}
 
 	gRPCTimeoutInSecondsDuration := time.Duration(config.GRPCTimeoutInSeconds) * time.Second
@@ -149,14 +153,17 @@ func NewKMS(kmsUUID uuid.UUID, logOutput io.Writer, logLevel log.Level, logInJso
 	go createdKMS.startGRPC()
 
 	// initialize from config
-	err := createdKMS.initializePeers(config)
+	err = createdKMS.initializePeers(config)
 	if err != nil {
 		log.Fatalf("Failed to initialize peers: %s", err)
 	}
 
 	// Start the akmsCkmsReceiverServer
 	if config.AkmsCkmsServerPort != "" {
-		createdKMS.ckmsAkmsServer = akmsServer.NewAKMSReceiver(config.AkmsCkmsServerPort, createdKMS.eventBus, receiver, createdKMS.GenerateAndSendKSAKey)
+		createdKMS.ckmsAkmsServer, err = akmsInterfaceServer.NewAKMSReceiver(config.AkmsCkmsServerPort, createdKMS.eventBus, receiver, createdKMS.GenerateAndSendKSAKey, config.AkmsCkmsTLS)
+		if err != nil {
+			log.Fatalf("Failed to initialize CkmsAkmsServer: %s", err)
+		}
 		log.Infof("Starting AKMS receiver server on port: %s", config.AkmsCkmsServerPort)
 		go createdKMS.ckmsAkmsServer.Serve()
 	}
diff --git a/goKMS/kms/peers/etsi14Quantummodule.go b/goKMS/kms/peers/etsi14Quantummodule.go
index a53e5053ce3d82b4c97ebac63e6dc475bc68c97b..0bd98eeadc5ad482ca34cb361231ef64133f8f59 100644
--- a/goKMS/kms/peers/etsi14Quantummodule.go
+++ b/goKMS/kms/peers/etsi14Quantummodule.go
@@ -51,7 +51,7 @@ func NewETSI014HTTPQuantumModule(addr, kmsId, localSAEID, targetSAEID string, tl
 	}
 
 	if tlsConfig.Active {
-		tlsConf, err := kmstls.GenerateTlsLibraryConfig(tlsConfig)
+		tlsConf, err := kmstls.GenerateTLSLibraryConfig(tlsConfig)
 		if err != nil {
 			return nil, fmt.Errorf("unable to generate TLS config: %w", err)
 		}
diff --git a/goKMS/kms/tls/tls.go b/goKMS/kms/tls/tls.go
index b32b55cd33b8904a92d63d32d630b2e18dbb3369..9f3dc73f6cc0c1a94a749df409e878400a0a9404 100644
--- a/goKMS/kms/tls/tls.go
+++ b/goKMS/kms/tls/tls.go
@@ -11,15 +11,15 @@ import (
 	"google.golang.org/grpc/credentials/insecure"
 )
 
-func GenerateGRPCServerTransportCredsBasedOnTLSFlag(tlsData config.TLSConfig) (credentials.TransportCredentials, error) {
+func GenerateGRPCServerTransportCredsBasedOnTLSFlag(tlsConfig config.TLSConfig) (credentials.TransportCredentials, error) {
 	var gRPCTransportCreds credentials.TransportCredentials
-	if tlsData.Active {
-		creds, err := generateGRPCServerTransportCredsWithTLS(tlsData.CAFile, tlsData.CertFile, tlsData.KeyFile)
+	if tlsConfig.Active {
+		tlsLibraryConfig, err := GenerateServerTLSLibraryConfig(tlsConfig)
 		if err != nil {
 			return nil, err
 		}
 
-		gRPCTransportCreds = creds
+		gRPCTransportCreds = credentials.NewTLS(tlsLibraryConfig)
 	} else {
 		gRPCTransportCreds = insecure.NewCredentials()
 	}
@@ -27,9 +27,9 @@ func GenerateGRPCServerTransportCredsBasedOnTLSFlag(tlsData config.TLSConfig) (c
 	return gRPCTransportCreds, nil
 }
 
-func generateGRPCServerTransportCredsWithTLS(caFile, certFile, keyFile string) (credentials.TransportCredentials, error) {
+func GenerateServerTLSLibraryConfig(tlsConfig config.TLSConfig) (*tls.Config, error) {
 	cp := x509.NewCertPool()
-	b, err := os.ReadFile(caFile)
+	b, err := os.ReadFile(tlsConfig.CAFile)
 	if err != nil {
 		return nil, err
 	}
@@ -38,30 +38,28 @@ func generateGRPCServerTransportCredsWithTLS(caFile, certFile, keyFile string) (
 		return nil, fmt.Errorf("credentials: failed to append certificates")
 	}
 
-	cert, err := tls.LoadX509KeyPair(certFile, keyFile)
+	cert, err := tls.LoadX509KeyPair(tlsConfig.CertFile, tlsConfig.KeyFile)
 	if err != nil {
 		return nil, err
 	}
 
-	tlsConfig := &tls.Config{
+	return &tls.Config{
 		MinVersion:   tls.VersionTLS13,
 		ClientCAs:    cp,
 		Certificates: []tls.Certificate{cert},
 		ClientAuth:   tls.RequireAndVerifyClientCert,
-	}
-
-	return credentials.NewTLS(tlsConfig), nil
+	}, nil
 }
 
 func GenerateGRPCClientTransportCredsBasedOnTLSFlag(tlsConfig config.TLSConfig) (credentials.TransportCredentials, error) {
 	var gRPCTransportCreds credentials.TransportCredentials
 	if tlsConfig.Active {
-		creds, err := generateGRPCClientTransportCredsWithTLS(tlsConfig.CAFile, tlsConfig.CertFile, tlsConfig.KeyFile)
+		tlsLibraryConfig, err := GenerateTLSLibraryConfig(tlsConfig)
 		if err != nil {
 			return nil, err
 		}
 
-		gRPCTransportCreds = creds
+		gRPCTransportCreds = credentials.NewTLS(tlsLibraryConfig)
 	} else {
 		gRPCTransportCreds = insecure.NewCredentials()
 	}
@@ -69,10 +67,10 @@ func GenerateGRPCClientTransportCredsBasedOnTLSFlag(tlsConfig config.TLSConfig)
 	return gRPCTransportCreds, nil
 }
 
-func generateGRPCClientTransportCredsWithTLS(caFile, certFile, keyFile string) (credentials.TransportCredentials, error) {
+func GenerateTLSLibraryConfig(tlsConfig config.TLSConfig) (*tls.Config, error) {
 	cp := x509.NewCertPool()
 
-	b, err := os.ReadFile(caFile)
+	b, err := os.ReadFile(tlsConfig.CAFile)
 	if err != nil {
 		return nil, err
 	}
@@ -80,30 +78,6 @@ func generateGRPCClientTransportCredsWithTLS(caFile, certFile, keyFile string) (
 		return nil, fmt.Errorf("credentials: failed to append certificates")
 	}
 
-	cert, err := tls.LoadX509KeyPair(certFile, keyFile)
-	if err != nil {
-		return nil, err
-	}
-
-	tlsConfig := &tls.Config{
-		MinVersion:   tls.VersionTLS13,
-		RootCAs:      cp,
-		Certificates: []tls.Certificate{cert},
-	}
-
-	return credentials.NewTLS(tlsConfig), nil
-}
-
-func GenerateTlsLibraryConfig(tlsConfig config.TLSConfig) (*tls.Config, error) {
-	caCert, err := os.ReadFile(tlsConfig.CAFile)
-	if err != nil {
-		return nil, err
-	}
-	caCertPool := x509.NewCertPool()
-	if !caCertPool.AppendCertsFromPEM(caCert) {
-		return nil, fmt.Errorf("credentials: failed to append certificates")
-	}
-
 	cert, err := tls.LoadX509KeyPair(tlsConfig.CertFile, tlsConfig.KeyFile)
 	if err != nil {
 		return nil, err
@@ -111,7 +85,7 @@ func GenerateTlsLibraryConfig(tlsConfig config.TLSConfig) (*tls.Config, error) {
 
 	return &tls.Config{
 		MinVersion:   tls.VersionTLS13,
-		RootCAs:      caCertPool,
+		RootCAs:      cp,
 		Certificates: []tls.Certificate{cert},
 	}, nil
 }