c532f83c24d9707d02c2584549b8ebff8b49b680
[aaa.git] / aaa-cert / src / main / java / org / opendaylight / aaa / cert / impl / AaaCertProvider.java
1 /*
2  * Copyright (c) 2015, 2017 Inocybe Technologies. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.aaa.cert.impl;
10
11 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
12 import java.security.KeyStore;
13 import java.util.ArrayList;
14 import java.util.List;
15 import org.opendaylight.aaa.cert.api.IAaaCertProvider;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.CtlKeystore;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.TrustKeystore;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.ctlkeystore.CipherSuites;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 /**
23  * AaaCertProvider use to manage the certificates manipulation operations add,
24  * revoke and update.
25  *
26  * @author mserngawy
27  *
28  */
29 public class AaaCertProvider implements IAaaCertProvider {
30
31     private static final Logger LOG = LoggerFactory.getLogger(AaaCertProvider.class);
32
33     private final CtlKeystore ctlKeyStore;
34     private final ODLKeyTool odlKeyTool;
35     private final TrustKeystore trustKeyStore;
36
37     public AaaCertProvider(final CtlKeystore ctlKeyStore, final TrustKeystore trustKeyStore) {
38         odlKeyTool = new ODLKeyTool();
39         this.ctlKeyStore = ctlKeyStore;
40         this.trustKeyStore = trustKeyStore;
41         LOG.info("aaa Certificate Service Initalized");
42     }
43
44     @Override
45     public TrustKeystore getTrustKeyStoreInfo() {
46         return trustKeyStore;
47     }
48
49     @Override
50     public CtlKeystore getOdlKeyStoreInfo() {
51         return ctlKeyStore;
52     }
53
54     @Override
55     public boolean addCertificateODLKeyStore(final String storePasswd, final String alias, final String certificate) {
56         final KeyStore keyStore = odlKeyTool.addCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
57                 certificate, alias, true);
58         return odlKeyTool.exportKeystore(keyStore, storePasswd, ctlKeyStore.getName());
59     }
60
61     @Override
62     public boolean addCertificateODLKeyStore(final String alias, final String certificate) {
63         return addCertificateODLKeyStore(ctlKeyStore.getStorePassword(), alias, certificate);
64     }
65
66     @Override
67     public boolean addCertificateTrustStore(final String storePasswd, final String alias, final String certificate) {
68         final KeyStore keyStore = odlKeyTool.addCertificate(
69                 odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), certificate, alias, true);
70         return odlKeyTool.exportKeystore(keyStore, storePasswd, trustKeyStore.getName());
71     }
72
73     @Override
74     public boolean addCertificateTrustStore(final String alias, final String certificate) {
75         return addCertificateTrustStore(trustKeyStore.getStorePassword(), alias, certificate);
76     }
77
78     @Override
79     public boolean createKeyStores() {
80         if (!KeyStoreConstant.checkKeyStoreFile(ctlKeyStore.getName())) {
81             final KeyStore keyStore = odlKeyTool.createKeyStoreWithSelfSignCert(ctlKeyStore.getName(),
82                     ctlKeyStore.getStorePassword(), ctlKeyStore.getDname(), ctlKeyStore.getAlias(),
83                     ctlKeyStore.getValidity(), ctlKeyStore.getKeyAlg(), ctlKeyStore.getKeysize(),
84                     ctlKeyStore.getSignAlg());
85             if (!odlKeyTool.exportKeystore(keyStore, ctlKeyStore.getStorePassword(), ctlKeyStore.getName())) {
86                 return false;
87             }
88         }
89         if (!KeyStoreConstant.checkKeyStoreFile(trustKeyStore.getName())) {
90             final KeyStore keyStore = odlKeyTool.createEmptyKeyStore(trustKeyStore.getStorePassword());
91             if (!odlKeyTool.exportKeystore(keyStore, trustKeyStore.getStorePassword(), trustKeyStore.getName())) {
92                 return false;
93             }
94         }
95         return true;
96     }
97
98     @Override
99     public String genODLKeyStoreCertificateReq(final String storePasswd, final boolean withTag) {
100         return odlKeyTool.generateCertificateReq(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
101                 storePasswd, ctlKeyStore.getAlias(), ctlKeyStore.getSignAlg(), withTag);
102     }
103
104     @Override
105     public String genODLKeyStoreCertificateReq(final boolean withTag) {
106         return genODLKeyStoreCertificateReq(ctlKeyStore.getStorePassword(), withTag);
107     }
108
109     @Override
110     public String getCertificateTrustStore(final String storePasswd, final String aliase, final boolean withTag) {
111         return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), aliase,
112                 withTag);
113     }
114
115     @Override
116     public String getCertificateTrustStore(final String aliase, final boolean withTag) {
117         return getCertificateTrustStore(trustKeyStore.getStorePassword(), aliase, withTag);
118     }
119
120     @Override
121     public String getODLKeyStoreCertificate(final String storePasswd, final boolean withTag) {
122         return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
123                 ctlKeyStore.getAlias(), withTag);
124     }
125
126     @Override
127     public String getODLKeyStoreCertificate(final boolean withTag) {
128         return getODLKeyStoreCertificate(ctlKeyStore.getStorePassword(), withTag);
129     }
130
131     @Override
132     public KeyStore getODLKeyStore() {
133         return odlKeyTool.loadKeyStore(ctlKeyStore.getName(), ctlKeyStore.getStorePassword());
134     }
135
136     @Override
137     public KeyStore getTrustKeyStore() {
138         return odlKeyTool.loadKeyStore(trustKeyStore.getName(), trustKeyStore.getStorePassword());
139     }
140
141     @Override
142     @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS")
143     public String[] getCipherSuites() {
144         final List<CipherSuites> cipherSuites = ctlKeyStore.getCipherSuites();
145         if (cipherSuites != null && !cipherSuites.isEmpty()) {
146             final List<String> suites = new ArrayList<>();
147             cipherSuites.stream().forEach(cs -> {
148                 if (!cs.getSuiteName().isEmpty()) {
149                     suites.add(cs.getSuiteName());
150                 }
151             });
152             return suites.toArray(new String[suites.size()]);
153         }
154         return null;
155     }
156
157     @Override
158     @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS")
159     public String[] getTlsProtocols() {
160         String tlsProtocols = ctlKeyStore.getTlsProtocols();
161         if (tlsProtocols != null && !tlsProtocols.isEmpty()) {
162             // remove white spaces in tlsProtocols string
163             tlsProtocols = tlsProtocols.replace(" ", "");
164             if (tlsProtocols.contains(",")) {
165                 return tlsProtocols.split(",");
166             } else {
167                 return new String[] { tlsProtocols };
168             }
169         }
170         return null;
171     }
172 }