use of de.carne.certmgr.certs.UserCertStoreEntry in project certmgr by hdecarne.
the class StoreController method onCmdDeleteEntry.
@SuppressWarnings("unused")
@FXML
void onCmdDeleteEntry(ActionEvent evt) {
UserCertStoreEntry entry = getSelectedStoreEntry();
if (entry != null) {
Optional<ButtonType> confirmation = Alerts.message(AlertType.CONFIRMATION, StoreI18N.formatSTR_MESSAGE_CONFIRM_DELETE(entry)).showAndWait();
if (confirmation.isPresent() && confirmation.get().getButtonData() == ButtonData.OK_DONE) {
try {
this.storeProperty.get().deleteEntry(entry.id());
if (entry.equals(getSelectedStoreEntry())) {
this.ctlStoreEntryView.getSelectionModel().clearSelection();
}
} catch (IOException e) {
Alerts.unexpected(e).showAndWait();
}
}
updateStoreEntryView();
}
}
use of de.carne.certmgr.certs.UserCertStoreEntry in project certmgr by hdecarne.
the class UserCertStoreTest method testAccessStore.
/**
* Test access store operations.
*/
@Test
public void testAccessStore() {
try {
UserCertStore store = UserCertStore.openStore(testStorePath.get());
Assert.assertEquals(11, store.size());
Assert.assertEquals(TestCerts.TEST_STORE_NAME, store.storeName());
Assert.assertEquals(11, store.getEntries().size());
Assert.assertEquals(1, traverseStore(store.getRootEntries()));
// Check preferences access
UserCertStorePreferences loadPreferences = Check.notNull(store.storePreferences());
Assert.assertEquals(Integer.valueOf(365), loadPreferences.defaultCRTValidityPeriod.get());
Assert.assertEquals(Integer.valueOf(30), loadPreferences.defaultCRLUpdatePeriod.get());
Assert.assertEquals("EC", loadPreferences.defaultKeyPairAlgorithm.get());
Assert.assertEquals(Integer.valueOf(384), loadPreferences.defaultKeySize.get());
Assert.assertEquals("SHA256WITHECDSA", loadPreferences.defaultSignatureAlgorithm.get());
UserCertStorePreferences setPreferences = Check.notNull(store.storePreferences());
setPreferences.defaultCRTValidityPeriod.putInt(180);
setPreferences.defaultCRLUpdatePeriod.putInt(7);
setPreferences.defaultKeyPairAlgorithm.put("EC");
setPreferences.defaultKeySize.putInt(521);
setPreferences.defaultSignatureAlgorithm.put("SHA256WITHECDSA");
setPreferences.sync();
UserCertStorePreferences getPreferences = Check.notNull(store.storePreferences());
Assert.assertEquals(Integer.valueOf(180), getPreferences.defaultCRTValidityPeriod.get());
Assert.assertEquals(Integer.valueOf(7), getPreferences.defaultCRLUpdatePeriod.get());
Assert.assertEquals("EC", getPreferences.defaultKeyPairAlgorithm.get());
Assert.assertEquals(Integer.valueOf(521), getPreferences.defaultKeySize.get());
Assert.assertEquals("SHA256WITHECDSA", getPreferences.defaultSignatureAlgorithm.get());
// Import access (with already existing entries)
UserCertStore importStore = UserCertStore.createFromFiles(collectDirectoryFiles(testStorePath.get()), TestCerts.password());
for (UserCertStoreEntry importStoreEntry : importStore.getEntries()) {
store.importEntry(importStoreEntry, TestCerts.password(), "Imported");
}
Assert.assertEquals(11, store.size());
// Revoke access
for (UserCertStoreEntry storeEntry : store.getEntries()) {
if (storeEntry.hasCRT() && !storeEntry.isSelfSigned() && !storeEntry.isRevoked()) {
UserCertStoreEntry issuerEntry = storeEntry.issuer();
if (issuerEntry.canIssue()) {
Date lastUpdate = new Date(System.currentTimeMillis());
Date nextUpdate = new Date(lastUpdate.getTime() + 1000);
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.getDefaultSet(issuerEntry.getPublicKey().getAlgorithm(), storeEntry.getCRT().getSigAlgName(), false).getDefault();
Assert.assertNotNull(signatureAlgorithm);
UpdateCRLRequest updateCRLRequest = new UpdateCRLRequest(lastUpdate, nextUpdate, signatureAlgorithm);
updateCRLRequest.addRevokeEntry(storeEntry.getCRT().getSerialNumber(), ReasonFlag.PRIVILEGE_WITHDRAWN);
issuerEntry.updateCRL(updateCRLRequest, TestCerts.password());
Assert.assertTrue(storeEntry.isRevoked());
}
}
}
// Delete access
List<UserCertStoreEntryId> deleteIds = new ArrayList<>();
for (UserCertStoreEntry storeEntry : store.getEntries()) {
deleteIds.add(storeEntry.id());
}
for (UserCertStoreEntryId deleteId : deleteIds) {
store.deleteEntry(deleteId);
}
Assert.assertEquals(0, store.size());
// Import access (now with empty store)
for (UserCertStoreEntry importStoreEntry : importStore.getEntries()) {
store.importEntry(importStoreEntry, TestCerts.password(), "Imported");
}
Assert.assertEquals(11, store.size());
} catch (IOException | BackingStoreException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
use of de.carne.certmgr.certs.UserCertStoreEntry in project certmgr by hdecarne.
the class UserCertStoreTest method testCreateAndOpenStore.
/**
* Test create/open store operations.
*/
@Test
public void testCreateAndOpenStore() {
Path storeHome = tempPath.get().resolve(NAME_STORE1);
try {
UserCertStore createdStore = UserCertStore.createStore(storeHome);
GenerateCertRequest request1 = generateRequest(createdStore, CertGenerators.DEFAULT, true);
UserCertStoreEntry generated1 = createdStore.generateEntry(CertGenerators.DEFAULT, request1, TestCerts.password(), TestCerts.password(), "TestCert");
DefaultSet<Issuer> issuers1 = CertGenerators.DEFAULT.getIssuers(createdStore, generated1);
GenerateCertRequest request2 = generateRequest(createdStore, CertGenerators.DEFAULT, false);
request2.setIssuer(issuers1.getDefault());
createdStore.generateEntry(CertGenerators.DEFAULT, request1, TestCerts.password(), TestCerts.password(), "TestCert");
Assert.assertEquals(2, createdStore.size());
} catch (IOException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
try {
UserCertStore.createStore(storeHome);
Assert.fail("Re-creating store succeeded, but should not");
} catch (FileAlreadyExistsException e) {
Exceptions.ignore(e);
} catch (IOException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
try {
UserCertStore openendStore = UserCertStore.openStore(storeHome);
Assert.assertEquals(2, openendStore.size());
} catch (IOException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
use of de.carne.certmgr.certs.UserCertStoreEntry in project certmgr by hdecarne.
the class UserCertStoreTest method traverseStore.
private int traverseStore(Set<UserCertStoreEntry> entries) {
int entryCount = 1;
try {
for (UserCertStoreEntry entry : entries) {
Attributes.toAttributes(entry);
if (entry.hasCRT()) {
X509CertificateHelper.toAttributes(entry.getCRT());
accessExtensionValues(entry.getCRT());
}
if (entry.hasCSR()) {
entry.getCSR().toAttributes();
accessExtensionValues(entry.getCSR());
}
if (entry.hasCRL()) {
X509CRLHelper.toAttributes(entry.getCRL());
accessExtensionValues(entry.getCRL());
}
entry.canIssue();
entry.isValid();
entry.isRevoked();
entryCount = traverseStore(entry.issuedEntries());
}
} catch (IOException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
return entryCount;
}
use of de.carne.certmgr.certs.UserCertStoreEntry in project certmgr by hdecarne.
the class CRLOptionsController method initEntries.
private void initEntries() throws IOException {
ObservableList<CRLEntryModel> entryItems = this.ctlEntryOptions.getItems();
for (UserCertStoreEntry issuedEntry : this.issuerEntryParam.get().issuedEntries()) {
BigInteger issuedSerial = issuedEntry.getCRT().getSerialNumber();
boolean revoked = false;
ReasonFlag reason = ReasonFlag.UNSPECIFIED;
Date date = null;
if (this.issuerEntryParam.get().hasCRL()) {
X509CRL crl = this.issuerEntryParam.get().getCRL();
X509CRLEntry crlEntry = crl.getRevokedCertificate(issuedSerial);
if (crlEntry != null) {
revoked = true;
CRLReason crlEntryReason = crlEntry.getRevocationReason();
if (crlEntryReason != null) {
reason = ReasonFlag.fromCRLReason(crlEntryReason);
}
date = crlEntry.getRevocationDate();
}
}
entryItems.add(new CRLEntryModel(issuedEntry, revoked, issuedSerial, reason, date));
}
entryItems.sort((o1, o2) -> o1.compareTo(o2));
}
Aggregations