Initial Project Structure
[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         "log"
24 )
25
26 var tlsConfig *tls.Config
27
28 // GetTLSConfig initializes a tlsConfig using the CA's certificate
29 // This config is then used to enable the server for mutual TLS
30 func GetTLSConfig(caCertFile string) *tls.Config {
31         // Initialize tlsConfig once
32         if tlsConfig == nil {
33                 caCert, err := ioutil.ReadFile(caCertFile)
34
35                 if err != nil {
36                         log.Fatal("Error reading CA Certificate")
37                         log.Fatal(err)
38                 }
39
40                 caCertPool := x509.NewCertPool()
41                 caCertPool.AppendCertsFromPEM(caCert)
42
43                 tlsConfig = &tls.Config{
44                         ClientAuth: tls.RequireAndVerifyClientCert,
45                         ClientCAs:  caCertPool,
46                         MinVersion: tls.VersionTLS12,
47                 }
48                 tlsConfig.BuildNameToCertificate()
49         }
50         return tlsConfig
51 }