mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
158 lines
7.4 KiB
Java
158 lines
7.4 KiB
Java
/**
|
|
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
|
*
|
|
* This software is licensed under the GNU General Public License v3 or later.
|
|
*
|
|
* It is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or any later version.
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
package com.cloud.keystore;
|
|
|
|
import java.security.KeyStore;
|
|
import java.util.HashMap;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
import org.apache.log4j.Logger;
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
|
|
import com.cloud.configuration.DefaultInterceptorLibrary;
|
|
import com.cloud.utils.component.ComponentLocator;
|
|
import com.cloud.utils.component.MockComponentLocator;
|
|
import com.cloud.utils.security.CertificateHelper;
|
|
|
|
public class KeystoreTest extends TestCase {
|
|
private final static Logger s_logger = Logger.getLogger(KeystoreTest.class);
|
|
|
|
private String keyContent =
|
|
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALV5vGlkiWwoZX4hTRplPXP8qtST\n" +
|
|
"hwZhko8noeY5vf8ECwmd+vrCTw/JvnOtkx/8oYNbg/SeUt1EfOsk6gqJdBblGFBZRMcUJlIpqE9z\n" +
|
|
"uv68U9G8Gfi/qvRSY336hibw0J5bZ4vn1QqmyHDB+Czea9AjFUV7AEVG15+vED7why+/AgMBAAEC\n" +
|
|
"gYBmFBPnNKYYMKDmUdUNA+WNWJK/ADzzWe8WlzR6TACTcbLDthl289WFC/YVG42mcHRpbxDKiEQU\n" +
|
|
"MnIR0rHTO34Qb/2HcuyweStU2gqR6omxBvMnFpJr90nD1HcOMJzeLHsphau0/EmKKey+gk4PyieD\n" +
|
|
"KqTM7LTjjHv8xPM4n+WAAQJBAOMNCeFKlJ4kMokWhU74B5/w/NGyT1BHUN0VmilHSiJC8JqS4BiI\n" +
|
|
"ZpAeET3VmilO6QTGh2XVhEDGteu3uZR6ipUCQQDMnRzMgQ/50LFeIQo4IBtwlEouczMlPQF4c21R\n" +
|
|
"1d720moxILVPT0NJZTQUDDmmgbL+B7CgtcCR2NlP5sKPZVADAkEAh4Xq1cy8dMBKYcVNgNtPQcqI\n" +
|
|
"PWpfKR3ISI5yXB0vRNAL6Vet5zbTcUZhKDVtNSbis3UEsGYH8NorEC2z2cpjGQJANhJi9Ow6c5Mh\n" +
|
|
"/DURBUn+1l5pyCKrZnDbvaALSLATLvjmFTuGjoHszy2OeKnOZmEqExWnKKE/VYuPyhy6V7i3TwJA\n" +
|
|
"f8skDgtPK0OsBCa6IljPaHoWBjPc4kFkSTSS1d56hUcWSikTmiuKdLyBb85AADSZYsvHWrte4opN\n" +
|
|
"dhNukMJuRA==\n";
|
|
|
|
private String certContent =
|
|
"-----BEGIN CERTIFICATE-----\n" +
|
|
"MIIE3jCCA8agAwIBAgIFAqv56tIwDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYT\n" +
|
|
"AlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYD\n" +
|
|
"VQQKExFHb0RhZGR5LmNvbSwgSW5jLjEzMDEGA1UECxMqaHR0cDovL2NlcnRpZmlj\n" +
|
|
"YXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5MTAwLgYDVQQDEydHbyBEYWRkeSBT\n" +
|
|
"ZWN1cmUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxETAPBgNVBAUTCDA3OTY5Mjg3\n" +
|
|
"MB4XDTA5MDIxMTA0NTc1NloXDTEyMDIwNzA1MTEyM1owWTEZMBcGA1UECgwQKi5y\n" +
|
|
"ZWFsaG9zdGlwLmNvbTEhMB8GA1UECwwYRG9tYWluIENvbnRyb2wgVmFsaWRhdGVk\n" +
|
|
"MRkwFwYDVQQDDBAqLnJlYWxob3N0aXAuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GN\n" +
|
|
"ADCBiQKBgQC1ebxpZIlsKGV+IU0aZT1z/KrUk4cGYZKPJ6HmOb3/BAsJnfr6wk8P\n" +
|
|
"yb5zrZMf/KGDW4P0nlLdRHzrJOoKiXQW5RhQWUTHFCZSKahPc7r+vFPRvBn4v6r0\n" +
|
|
"UmN9+oYm8NCeW2eL59UKpshwwfgs3mvQIxVFewBFRtefrxA+8IcvvwIDAQABo4IB\n" +
|
|
"vTCCAbkwDwYDVR0TAQH/BAUwAwEBADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\n" +
|
|
"BQUHAwIwDgYDVR0PAQH/BAQDAgWgMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9j\n" +
|
|
"cmwuZ29kYWRkeS5jb20vZ2RzMS0yLmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0B\n" +
|
|
"BxcBMDkwNwYIKwYBBQUHAgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j\n" +
|
|
"b20vcmVwb3NpdG9yeS8wgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0\n" +
|
|
"cDovL29jc3AuZ29kYWRkeS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlm\n" +
|
|
"aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNy\n" +
|
|
"dDAfBgNVHSMEGDAWgBT9rGEyk2xF1uLuhV+auud2mWjM5zArBgNVHREEJDAighAq\n" +
|
|
"LnJlYWxob3N0aXAuY29tgg5yZWFsaG9zdGlwLmNvbTAdBgNVHQ4EFgQUHxwmdK5w\n" +
|
|
"9/YVeZ/3fHyi6nQfzoYwDQYJKoZIhvcNAQEFBQADggEBABv/XinvId6oWXJtmku+\n" +
|
|
"7m90JhSVH0ycoIGjgdaIkcExQGP08MCilbUsPcbhLheSFdgn/cR4e1MP083lacoj\n" +
|
|
"OGauY7b8f/cuquGkT49Ns14awPlEzRjjycQEjjLxFEuL5CFWa2t2gKRE1dSfhDQ+\n" +
|
|
"fJ6GBCs1XgZLuhkKS8fPf+YmG2ZjHzYDjYoSx7paDXgEm+kbYIZdCK51lA0BUAjP\n" +
|
|
"9ZMGhsu/PpAbh5U/DtcIqxY0xeqD4TeGsBzXg6uLhv+jKHDtXg5fYPe+z0n5DCEL\n" +
|
|
"k0fLF4+i/pt9hVCz0QrZ28RUhXf825+EOL0Gw+Uzt+7RV2cCaJrlu4cDrDom2FRy\n" +
|
|
"E8I=\n" +
|
|
"-----END CERTIFICATE-----\n";
|
|
|
|
@Override
|
|
@Before
|
|
public void setUp() {
|
|
MockComponentLocator locator = new MockComponentLocator("management-server");
|
|
locator.addDao("keystoreDao", KeystoreDaoImpl.class);
|
|
locator.addManager("KeystoreManager", KeystoreManagerImpl.class);
|
|
locator.makeActive(new DefaultInterceptorLibrary());
|
|
}
|
|
|
|
@Override
|
|
@After
|
|
public void tearDown() throws Exception {
|
|
}
|
|
|
|
public void testKeystoreSave() throws Exception {
|
|
KeystoreVO ksVo;
|
|
|
|
ComponentLocator locator = ComponentLocator.getCurrentLocator();
|
|
|
|
KeystoreDao ksDao = locator.getDao(KeystoreDao.class);
|
|
ksDao.save("CPVMCertificate", "CPVMCertificate", "KeyForCertificate", "realhostip.com");
|
|
ksVo = ksDao.findByName("CPVMCertificate");
|
|
assertTrue(ksVo != null);
|
|
assertTrue(ksVo.getCertificate().equals("CPVMCertificate"));
|
|
assertTrue(ksVo.getKey().equals("KeyForCertificate"));
|
|
assertTrue(ksVo.getDomainSuffix().equals("realhostip.com"));
|
|
|
|
ksDao.save("CPVMCertificate", "CPVMCertificate Again", "KeyForCertificate Again", "again.realhostip.com");
|
|
|
|
ksVo = ksDao.findByName("CPVMCertificate");
|
|
assertTrue(ksVo != null);
|
|
assertTrue(ksVo.getCertificate().equals("CPVMCertificate Again"));
|
|
assertTrue(ksVo.getKey().equals("KeyForCertificate Again"));
|
|
assertTrue(ksVo.getDomainSuffix().equals("again.realhostip.com"));
|
|
|
|
ksDao.expunge(ksVo.getId());
|
|
}
|
|
|
|
public void testStripeKey() throws Exception {
|
|
Pattern regex = Pattern.compile("(^[\\-]+[^\\-]+[\\-]+[\\n]?)([^\\-]+)([\\-]+[^\\-]+[\\-]+$)");
|
|
Matcher m = regex.matcher("-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAm4bLUORp9oM65GV9XrPrbs+K563DjUR1M8mP1HaE+Y4lX5pk\nvQjC/xoEqSs5pxDDWXAkoexvxij8A4AWcsKU1Q+ep2E+GcytBoz8XINGvgb8cQNn\n/4PlVWKp7j5SDDNCfleYvmiRn8k6P4mxVJOHKzwb/IwQcKghyqAF1w==\n-----END RSA PRIVATE KEY-----");
|
|
if(m.find()) {
|
|
String content = m.group(2);
|
|
assertTrue(content.startsWith("MIIEpAIBAAKCAQE"));
|
|
assertTrue(content.endsWith("KghyqAF1w==\n"));
|
|
} else {
|
|
assertTrue(false);
|
|
}
|
|
}
|
|
|
|
public void testKeystoreManager() throws Exception {
|
|
ComponentLocator locator = ComponentLocator.getCurrentLocator();
|
|
|
|
KeystoreManagerImpl ksMgr = ComponentLocator.inject(KeystoreManagerImpl.class);
|
|
assertTrue(ksMgr.configure("TaskManager", new HashMap<String, Object>()));
|
|
assertTrue(ksMgr.start());
|
|
|
|
ksMgr.saveCertificate("CPVMCertificate", certContent, keyContent, "realhostip.com");
|
|
|
|
byte[] ksBits = ksMgr.getKeystoreBits("CPVMCertificate", "realhostip", "vmops.com");
|
|
assertTrue(ksBits != null);
|
|
|
|
try {
|
|
KeyStore ks = CertificateHelper.loadKeystore(ksBits, "vmops.com");
|
|
assertTrue(ks != null);
|
|
} catch(Exception e) {
|
|
assertTrue(false);
|
|
}
|
|
|
|
KeystoreDao ksDao = locator.getDao(KeystoreDao.class);
|
|
KeystoreVO ksVo = ksDao.findByName("CPVMCertificate");
|
|
ksDao.expunge(ksVo.getId());
|
|
}
|
|
}
|