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
8 package org.opendaylight.aaa.cert.impl;
10 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
11 import java.security.KeyStore;
12 import org.opendaylight.aaa.cert.api.IAaaCertProvider;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.CtlKeystore;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.TrustKeystore;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.aaa.cert.rev151126.aaa.cert.service.config.ctlkeystore.CipherSuites;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
20 * AaaCertProvider use to manage the certificates manipulation operations add,
26 public class AaaCertProvider implements IAaaCertProvider {
28 private static final Logger LOG = LoggerFactory.getLogger(AaaCertProvider.class);
30 private final CtlKeystore ctlKeyStore;
31 private final ODLKeyTool odlKeyTool;
32 private final TrustKeystore trustKeyStore;
34 public AaaCertProvider(final CtlKeystore ctlKeyStore, final TrustKeystore trustKeyStore) {
35 odlKeyTool = new ODLKeyTool();
36 this.ctlKeyStore = ctlKeyStore;
37 this.trustKeyStore = trustKeyStore;
38 LOG.info("aaa Certificate Service Initalized");
42 public TrustKeystore getTrustKeyStoreInfo() {
47 public CtlKeystore getOdlKeyStoreInfo() {
52 public boolean addCertificateODLKeyStore(final String storePasswd, final String alias, final String certificate) {
53 final KeyStore keyStore = odlKeyTool.addCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
54 certificate, alias, true);
55 return odlKeyTool.exportKeystore(keyStore, storePasswd, ctlKeyStore.getName());
59 public boolean addCertificateODLKeyStore(final String alias, final String certificate) {
60 return addCertificateODLKeyStore(ctlKeyStore.getStorePassword(), alias, certificate);
64 public boolean addCertificateTrustStore(final String storePasswd, final String alias, final String certificate) {
65 final KeyStore keyStore = odlKeyTool.addCertificate(
66 odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), certificate, alias, true);
67 return odlKeyTool.exportKeystore(keyStore, storePasswd, trustKeyStore.getName());
71 public boolean addCertificateTrustStore(final String alias, final String certificate) {
72 return addCertificateTrustStore(trustKeyStore.getStorePassword(), alias, certificate);
76 public boolean createKeyStores() {
77 if (!KeyStoreConstant.checkKeyStoreFile(ctlKeyStore.getName())) {
78 final KeyStore keyStore = odlKeyTool.createKeyStoreWithSelfSignCert(ctlKeyStore.getName(),
79 ctlKeyStore.getStorePassword(), ctlKeyStore.getDname(), ctlKeyStore.getAlias(),
80 ctlKeyStore.getValidity(), ctlKeyStore.getKeyAlg(), ctlKeyStore.getKeysize(),
81 ctlKeyStore.getSignAlg());
82 if (!odlKeyTool.exportKeystore(keyStore, ctlKeyStore.getStorePassword(), ctlKeyStore.getName())) {
86 if (!KeyStoreConstant.checkKeyStoreFile(trustKeyStore.getName())) {
87 final KeyStore keyStore = odlKeyTool.createEmptyKeyStore(trustKeyStore.getStorePassword());
88 if (!odlKeyTool.exportKeystore(keyStore, trustKeyStore.getStorePassword(), trustKeyStore.getName())) {
96 public String genODLKeyStoreCertificateReq(final String storePasswd, final boolean withTag) {
97 return odlKeyTool.generateCertificateReq(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
98 storePasswd, ctlKeyStore.getAlias(), ctlKeyStore.getSignAlg(), withTag);
102 public String genODLKeyStoreCertificateReq(final boolean withTag) {
103 return genODLKeyStoreCertificateReq(ctlKeyStore.getStorePassword(), withTag);
107 public String getCertificateTrustStore(final String storePasswd, final String aliase, final boolean withTag) {
108 return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(trustKeyStore.getName(), storePasswd), aliase,
113 public String getCertificateTrustStore(final String aliase, final boolean withTag) {
114 return getCertificateTrustStore(trustKeyStore.getStorePassword(), aliase, withTag);
118 public String getODLKeyStoreCertificate(final String storePasswd, final boolean withTag) {
119 return odlKeyTool.getCertificate(odlKeyTool.loadKeyStore(ctlKeyStore.getName(), storePasswd),
120 ctlKeyStore.getAlias(), withTag);
124 public String getODLKeyStoreCertificate(final boolean withTag) {
125 return getODLKeyStoreCertificate(ctlKeyStore.getStorePassword(), withTag);
129 public KeyStore getODLKeyStore() {
130 return odlKeyTool.loadKeyStore(ctlKeyStore.getName(), ctlKeyStore.getStorePassword());
134 public KeyStore getTrustKeyStore() {
135 return odlKeyTool.loadKeyStore(trustKeyStore.getName(), trustKeyStore.getStorePassword());
139 public String[] getCipherSuites() {
140 return ctlKeyStore.nonnullCipherSuites().stream()
141 .map(CipherSuites::getSuiteName)
142 .filter(name -> !name.isEmpty())
143 .toArray(String[]::new);
147 @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS")
148 public String[] getTlsProtocols() {
149 String tlsProtocols = ctlKeyStore.getTlsProtocols();
150 if (tlsProtocols != null && !tlsProtocols.isEmpty()) {
151 // remove white spaces in tlsProtocols string
152 tlsProtocols = tlsProtocols.replace(" ", "");
153 if (tlsProtocols.contains(",")) {
154 return tlsProtocols.split(",");
156 return new String[] { tlsProtocols };