Auth.go returns error during tlsconfig
[aaf/sms.git] / sms-service / src / sms / auth / auth.go
1 /*
2  * Copyright 2018 Intel Corporation, Inc
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package auth
18
19 import (
20         "crypto/tls"
21         "crypto/x509"
22         "io/ioutil"
23 )
24
25 var tlsConfig *tls.Config
26
27 // GetTLSConfig initializes a tlsConfig using the CA's certificate
28 // This config is then used to enable the server for mutual TLS
29 func GetTLSConfig(caCertFile string) (*tls.Config, error) {
30         // Initialize tlsConfig once
31         if tlsConfig == nil {
32                 caCert, err := ioutil.ReadFile(caCertFile)
33
34                 if err != nil {
35                         return nil, err
36                 }
37
38                 caCertPool := x509.NewCertPool()
39                 caCertPool.AppendCertsFromPEM(caCert)
40
41                 tlsConfig = &tls.Config{
42                         ClientAuth: tls.RequireAndVerifyClientCert,
43                         ClientCAs:  caCertPool,
44                         MinVersion: tls.VersionTLS12,
45                 }
46                 tlsConfig.BuildNameToCertificate()
47         }
48         return tlsConfig, nil
49 }