2 * Copyright (c) 2015, 2017 Inocybe Technologies. and others. All rights reserved.
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
9 package org.opendaylight.aaa.cert.impl;
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;
23 * AaaCertProvider use to manage the certificates manipulation operations add,
29 public class AaaCertProvider implements IAaaCertProvider {
31 private static final Logger LOG = LoggerFactory.getLogger(AaaCertProvider.class);
33 private final CtlKeystore ctlKeyStore;
34 private final ODLKeyTool odlKeyTool;
35 private final TrustKeystore trustKeyStore;
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");
45 public TrustKeystore getTrustKeyStoreInfo() {
50 public CtlKeystore getOdlKeyStoreInfo() {
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());
62 public boolean addCertificateODLKeyStore(final String alias, final String certificate) {
63 return addCertificateODLKeyStore(ctlKeyStore.getStorePassword(), alias, certificate);
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());
74 public boolean addCertificateTrustStore(final String alias, final String certificate) {
75 return addCertificateTrustStore(trustKeyStore.getStorePassword(), alias, certificate);
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())) {
89 if (!KeyStoreConstant.checkKeyStoreFile(trustKeyStore.getName())) {
90 final KeyStore keyStore = odlKeyTool.createEmptyKeyStore(trustKeyStore.getStorePassword());
91 if (!odlKeyTool.exportKeystore(keyStore, trustKeyStore.getStorePassword(), trustKeyStore.getName())) {
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);
105 public String genODLKeyStoreCertificateReq(final boolean withTag) {
106 return genODLKeyStoreCertificateReq(ctlKeyStore.getStorePassword(), withTag);
110 public String getCertificateTrustStore(final String storePasswd, final String aliase, final boolean withTag) {
111 return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), aliase,
116 public String getCertificateTrustStore(final String aliase, final boolean withTag) {
117 return getCertificateTrustStore(trustKeyStore.getStorePassword(), aliase, withTag);
121 public String getODLKeyStoreCertificate(final String storePasswd, final boolean withTag) {
122 return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
123 ctlKeyStore.getAlias(), withTag);
127 public String getODLKeyStoreCertificate(final boolean withTag) {
128 return getODLKeyStoreCertificate(ctlKeyStore.getStorePassword(), withTag);
132 public KeyStore getODLKeyStore() {
133 return odlKeyTool.loadKeyStore(ctlKeyStore.getName(), ctlKeyStore.getStorePassword());
137 public KeyStore getTrustKeyStore() {
138 return odlKeyTool.loadKeyStore(trustKeyStore.getName(), trustKeyStore.getStorePassword());
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());
152 return suites.toArray(new String[suites.size()]);
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(",");
167 return new String[] { tlsProtocols };