From d607d1b63b63f3bbddcd415ca50b86c160c6f767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Michael?= Date: Sun, 29 Oct 2023 17:24:22 +0100 Subject: [PATCH] Introduce column 'Certificate Validity' in main window (#249) * GUI improvment #249 * Introduce column 'Certificate Validity' in main window * Amendments * Amendments #2 * Renaming to validity start --- kse/src/org/kse/gui/KeyStoreTableColumns.java | 177 +++++++++--------- .../org/kse/gui/KeyStoreTableHeadRend.java | 2 + kse/src/org/kse/gui/KeyStoreTableModel.java | 33 ++++ .../org/kse/gui/preferences/DPreferences.java | 41 ++-- .../kse/gui/preferences/resources.properties | 1 + .../gui/preferences/resources_de.properties | 1 + .../gui/preferences/resources_fr.properties | 1 + kse/src/org/kse/gui/resources.properties | 80 ++++---- kse/src/org/kse/gui/resources_de.properties | 80 ++++---- kse/src/org/kse/gui/resources_fr.properties | 80 ++++---- 10 files changed, 270 insertions(+), 226 deletions(-) diff --git a/kse/src/org/kse/gui/KeyStoreTableColumns.java b/kse/src/org/kse/gui/KeyStoreTableColumns.java index 1df74ac30..90b491788 100644 --- a/kse/src/org/kse/gui/KeyStoreTableColumns.java +++ b/kse/src/org/kse/gui/KeyStoreTableColumns.java @@ -19,6 +19,8 @@ */ package org.kse.gui; +import java.util.stream.Stream; + /** * POJO class to configure the cells shown in the KeyStore table of KeyStore Explorer. */ @@ -27,6 +29,7 @@ public class KeyStoreTableColumns { private boolean bEnableEntryName; private boolean bEnableAlgorithm; private boolean bEnableKeySize; + private boolean bEnableCertificateValidityStart; private boolean bEnableCertificateExpiry; private boolean bEnableLastModified; private boolean bEnableSKI; @@ -47,6 +50,7 @@ public class KeyStoreTableColumns { private int iAlgorithmColumn = -1; private int iKeySizeColumn = -1; private int iCurveColumn = -1; + private int iCertValidityStartColumn = -1; private int iCertExpiryColumn = -1; private int iLastModifiedColumn = -1; private int iAKIColumn = -1; @@ -66,6 +70,7 @@ public KeyStoreTableColumns() { bEnableEntryName = true; bEnableAlgorithm = true; bEnableKeySize = true; + bEnableCertificateValidityStart = false; bEnableCertificateExpiry = true; bEnableLastModified = true; bEnableSKI = false; @@ -82,15 +87,17 @@ public KeyStoreTableColumns() { } public KeyStoreTableColumns(boolean bEnableEntryName, boolean bEnableAlgorithm, boolean bEnableKeySize, - boolean bEnableCertificateExpiry, boolean bEnableLastModified, boolean bEnableSKI, - boolean bEnableAKI, boolean bEnableIssuerDN, boolean bEnableSubjectDN, - boolean bEnableIssuerCN, boolean bEnableSubjectCN, boolean bEnableIssuerO, - boolean bEnableSubjectO, boolean bEnableCurve, int expiryWarnDays, - boolean bEnableSerialNumberHex, boolean bEnableSerialNumberDec) { + boolean bEnableCertificateValidityStart, boolean bEnableCertificateExpiry, + boolean bEnableLastModified, boolean bEnableSKI, boolean bEnableAKI, + boolean bEnableIssuerDN, boolean bEnableSubjectDN, boolean bEnableIssuerCN, + boolean bEnableSubjectCN, boolean bEnableIssuerO, boolean bEnableSubjectO, + boolean bEnableCurve, int expiryWarnDays, boolean bEnableSerialNumberHex, + boolean bEnableSerialNumberDec) { super(); this.bEnableEntryName = bEnableEntryName; this.bEnableAlgorithm = bEnableAlgorithm; this.bEnableKeySize = bEnableKeySize; + this.bEnableCertificateValidityStart = bEnableCertificateValidityStart; this.bEnableCertificateExpiry = bEnableCertificateExpiry; this.bEnableLastModified = bEnableLastModified; this.bEnableSKI = bEnableSKI; @@ -114,6 +121,7 @@ private void sortCol() { iAlgorithmColumn = -1; iKeySizeColumn = -1; iCurveColumn = -1; + iCertValidityStartColumn = -1; iCertExpiryColumn = -1; iLastModifiedColumn = -1; iAKIColumn = -1; @@ -139,6 +147,9 @@ private void sortCol() { if (bEnableCurve) { iCurveColumn = ++col; } + if (bEnableCertificateValidityStart) { + iCertValidityStartColumn = ++col; + } if (bEnableCertificateExpiry) { iCertExpiryColumn = ++col; } @@ -178,14 +189,15 @@ private void sortCol() { } public void setColumns(boolean bEnableEntryName, boolean bEnableAlgorithm, boolean bEnableKeySize, - boolean bEnableCertificateExpiry, boolean bEnableLastModified, boolean bEnableSKI, - boolean bEnableAKI, boolean bEnableIssuerDN, boolean bEnableSubjectDN, - boolean bEnableIssuerCN, boolean bEnableSubjectCN, boolean bEnableIssuerO, - boolean bEnableSubjectO, boolean bEnableCurve, boolean bEnableSerialNumberHex, - boolean bEnableSerialNumberDec, int expiryWarnDays) { + boolean bEnableCertificateValidityStart, boolean bEnableCertificateExpiry, + boolean bEnableLastModified, boolean bEnableSKI, boolean bEnableAKI, boolean bEnableIssuerDN, + boolean bEnableSubjectDN, boolean bEnableIssuerCN, boolean bEnableSubjectCN, + boolean bEnableIssuerO, boolean bEnableSubjectO, boolean bEnableCurve, + boolean bEnableSerialNumberHex, boolean bEnableSerialNumberDec, int expiryWarnDays) { this.bEnableEntryName = bEnableEntryName; this.bEnableAlgorithm = bEnableAlgorithm; this.bEnableKeySize = bEnableKeySize; + this.bEnableCertificateValidityStart = bEnableCertificateValidityStart; this.bEnableCertificateExpiry = bEnableCertificateExpiry; this.bEnableLastModified = bEnableLastModified; this.bEnableSKI = bEnableSKI; @@ -210,22 +222,23 @@ public void setColumns(boolean bEnableEntryName, boolean bEnableAlgorithm, boole */ public void setColumns(int col) { - bEnableEntryName = ((col & 1) != 0); - bEnableAlgorithm = ((col & 2) != 0); - bEnableKeySize = ((col & 4) != 0); - bEnableCertificateExpiry = ((col & 8) != 0); - bEnableLastModified = ((col & 0x10) != 0); - bEnableSKI = ((col & 0x20) != 0); - bEnableAKI = ((col & 0x40) != 0); - bEnableIssuerDN = ((col & 0x80) != 0); - bEnableSubjectDN = ((col & 0x100) != 0); - bEnableCurve = ((col & 0x200) != 0); - bEnableIssuerCN = ((col & 0x400) != 0); - bEnableSubjectCN = ((col & 0x800) != 0); - bEnableIssuerO = ((col & 0x1000) != 0); - bEnableSubjectO = ((col & 0x2000) != 0); - bEnableSerialNumberHex = ((col & 0x4000) != 0); - bEnableSerialNumberDec = ((col & 0x8000) != 0); + bEnableEntryName = ((col & 1 << 0) != 0); + bEnableAlgorithm = ((col & 1 << 1) != 0); + bEnableKeySize = ((col & 1 << 2) != 0); + bEnableCertificateExpiry = ((col & 1 << 3) != 0); + bEnableLastModified = ((col & 1 << 4) != 0); + bEnableSKI = ((col & 1 << 5) != 0); + bEnableAKI = ((col & 1 << 6) != 0); + bEnableIssuerDN = ((col & 1 << 7) != 0); + bEnableSubjectDN = ((col & 1 << 8) != 0); + bEnableCurve = ((col & 1 << 9) != 0); + bEnableIssuerCN = ((col & 1 << 10) != 0); + bEnableSubjectCN = ((col & 1 << 11) != 0); + bEnableIssuerO = ((col & 1 << 12) != 0); + bEnableSubjectO = ((col & 1 << 13) != 0); + bEnableSerialNumberHex = ((col & 1 << 14) != 0); + bEnableSerialNumberDec = ((col & 1 << 15) != 0); + bEnableCertificateValidityStart = ((col & 1 << 16) != 0); sortCol(); } @@ -237,52 +250,55 @@ public void setColumns(int col) { public int getColumns() { int col = 0; if (bEnableEntryName) { - col += 1; + col += 1 << 0; } if (bEnableAlgorithm) { - col += 2; + col += 1 << 1; } if (bEnableKeySize) { - col += 4; + col += 1 << 2; } if (bEnableCertificateExpiry) { - col += 8; + col += 1 << 3; } if (bEnableLastModified) { - col += 0x10; + col += 1 << 4; } if (bEnableSKI) { - col += 0x20; + col += 1 << 5; } if (bEnableAKI) { - col += 0x40; + col += 1 << 6; } if (bEnableIssuerDN) { - col += 0x80; + col += 1 << 7; } if (bEnableSubjectDN) { - col += 0x100; + col += 1 << 8; } if (bEnableCurve) { - col += 0x200; + col += 1 << 9; } if (bEnableIssuerCN) { - col += 0x400; + col += 1 << 10; } if (bEnableSubjectCN) { - col += 0x800; + col += 1 << 11; } if (bEnableIssuerO) { - col += 0x1000; + col += 1 << 12; } if (bEnableSubjectO) { - col += 0x2000; + col += 1 << 13; } if (bEnableSerialNumberHex) { - col += 0x4000; + col += 1 << 14; } if (bEnableSerialNumberDec) { - col += 0x8000; + col += 1 << 15; + } + if (bEnableCertificateValidityStart) { + col += 1 << 16; } return col; } @@ -293,56 +309,25 @@ public int getColumns() { * @return number of columns selected */ public int getNofColumns() { - int col = 0; - if (bEnableEntryName) { - col++; - } - if (bEnableAlgorithm) { - col++; - } - if (bEnableKeySize) { - col++; - } - if (bEnableCertificateExpiry) { - col++; - } - if (bEnableLastModified) { - col++; - } - if (bEnableSKI) { - col++; - } - if (bEnableAKI) { - col++; - } - if (bEnableIssuerDN) { - col++; - } - if (bEnableSubjectDN) { - col++; - } - if (bEnableCurve) { - col++; - } - if (bEnableIssuerCN) { - col++; - } - if (bEnableSubjectCN) { - col++; - } - if (bEnableIssuerO) { - col++; - } - if (bEnableSubjectO) { - col++; - } - if (bEnableSerialNumberHex) { - col++; - } - if (bEnableSerialNumberDec) { - col++; - } - return col; + return Stream.of( + bEnableEntryName, + bEnableAlgorithm, + bEnableKeySize, + bEnableCertificateValidityStart, + bEnableCertificateExpiry, + bEnableLastModified, + bEnableSKI, + bEnableAKI, + bEnableIssuerDN, + bEnableSubjectDN, + bEnableCurve, + bEnableIssuerCN, + bEnableSubjectCN, + bEnableIssuerO, + bEnableSubjectO, + bEnableSerialNumberHex, + bEnableSerialNumberDec + ).mapToInt(b -> b ? 1 : 0).sum(); } public boolean getEnableEntryName() { @@ -357,6 +342,10 @@ public boolean getEnableKeySize() { return bEnableKeySize; } + public boolean getEnableCertificateValidityStart() { + return bEnableCertificateValidityStart; + } + public boolean getEnableCertificateExpiry() { return bEnableCertificateExpiry; } @@ -429,6 +418,10 @@ public int colKeySize() { return iKeySizeColumn; } + public int colCertificateValidityStart() { + return iCertValidityStartColumn; + } + public int colCertificateExpiry() { return iCertExpiryColumn; } diff --git a/kse/src/org/kse/gui/KeyStoreTableHeadRend.java b/kse/src/org/kse/gui/KeyStoreTableHeadRend.java index 74a95a60c..a6c2ca30d 100644 --- a/kse/src/org/kse/gui/KeyStoreTableHeadRend.java +++ b/kse/src/org/kse/gui/KeyStoreTableHeadRend.java @@ -113,6 +113,8 @@ else if (col == 2) { header.setToolTipText(res.getString("KeyStoreTableHeadRend.AlgorithmColumn.tooltip")); } else if (col == keyStoreTableColumns.colKeySize()) { header.setToolTipText(res.getString("KeyStoreTableHeadRend.KeySizeColumn.tooltip")); + } else if (col == keyStoreTableColumns.colCertificateValidityStart()) { + header.setToolTipText(res.getString("KeyStoreTableHeadRend.CertValidityStartColumn.tooltip")); } else if (col == keyStoreTableColumns.colCertificateExpiry()) { header.setToolTipText(res.getString("KeyStoreTableHeadRend.CertExpiryColumn.tooltip")); } else if (col == keyStoreTableColumns.colLastModified()) { diff --git a/kse/src/org/kse/gui/KeyStoreTableModel.java b/kse/src/org/kse/gui/KeyStoreTableModel.java index a75b9778e..4ce08ddda 100644 --- a/kse/src/org/kse/gui/KeyStoreTableModel.java +++ b/kse/src/org/kse/gui/KeyStoreTableModel.java @@ -102,6 +102,7 @@ public class KeyStoreTableModel extends AbstractTableModel { private int iAlgorithmColumn = -1; private int iKeySizeColumn = -1; private int iCurveColumn = -1; + private int iCertValidityStartColumn = -1; private int iCertExpiryColumn = -1; private int iLastModifiedColumn = -1; private int iAKIColumn = -1; @@ -232,6 +233,15 @@ public void load(KeyStoreHistory history) throws GeneralSecurityException, Crypt } } } + if (iCertValidityStartColumn > 0) { + Date validityStart = getCertificateValidityStart(alias, keyStore); + // Validity start date column + if (validityStart != null) { + data[i][iCertValidityStartColumn] = validityStart; + } else { + data[i][iCertValidityStartColumn] = null; // No validity start date - must be a key entry + } + } if (iCertExpiryColumn > 0) { // Expiry date column if (expiry != null) { @@ -356,6 +366,22 @@ public void load(KeyStoreHistory history) throws GeneralSecurityException, Crypt fireTableDataChanged(); } + private Date getCertificateValidityStart(String alias, KeyStore keyStore) throws CryptoException, KeyStoreException { + if (KeyStoreUtil.isTrustedCertificateEntry(alias, keyStore)) { + return X509CertUtil.convertCertificate(keyStore.getCertificate(alias)).getNotBefore(); + } else { + Certificate[] chain = keyStore.getCertificateChain(alias); + + if (chain == null) { + return null; // Key entry - no validity start date + } + + // Key pair - first certificate in chain will be for the private key + X509Certificate[] x509Chain = X509CertUtil.orderX509CertChain(X509CertUtil.convertCertificates(chain)); + return x509Chain[0].getNotBefore(); + } + } + private Date getCertificateExpiry(String alias, KeyStore keyStore) throws CryptoException, KeyStoreException { if (KeyStoreUtil.isTrustedCertificateEntry(alias, keyStore)) { return X509CertUtil.convertCertificate(keyStore.getCertificate(alias)).getNotAfter(); @@ -529,6 +555,7 @@ private void adjustColumns(KeyStoreTableColumns keyStoreTableColumnsParm) { iAlgorithmColumn = -1; iKeySizeColumn = -1; iCurveColumn = -1; + iCertValidityStartColumn = -1; iCertExpiryColumn = -1; iLastModifiedColumn = -1; iAKIColumn = -1; @@ -575,6 +602,12 @@ private void adjustColumns(KeyStoreTableColumns keyStoreTableColumnsParm) { columnTypes[col] = String.class; iCurveColumn = col; } + if (col == keyStoreTableColumns.colCertificateValidityStart()) { + columnNames[col] = res.getString("KeyStoreTableModel.CertValidityStartColumn"); + columnTypes[col] = Date.class; + iCertValidityStartColumn = col; + iColWidth[col] = " 20.00.2000 00:00:00 MESZ ".length(); + } if (col == keyStoreTableColumns.colCertificateExpiry()) { columnNames[col] = res.getString("KeyStoreTableModel.CertExpiryColumn"); columnTypes[col] = Date.class; diff --git a/kse/src/org/kse/gui/preferences/DPreferences.java b/kse/src/org/kse/gui/preferences/DPreferences.java index 13bb9ad96..7c680151e 100644 --- a/kse/src/org/kse/gui/preferences/DPreferences.java +++ b/kse/src/org/kse/gui/preferences/DPreferences.java @@ -61,8 +61,6 @@ import javax.swing.SpinnerNumberModel; import javax.swing.ToolTipManager; import javax.swing.UIManager; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; @@ -184,6 +182,8 @@ public class DPreferences extends JEscDialog { private boolean bEnableAlgorithm; private JCheckBox jcbEnableKeySize; private boolean bEnableKeySize; + private JCheckBox jcbEnableCertificateValidityStart; + private boolean bEnableCertificateValidityStart; private JCheckBox jcbEnableCertificateExpiry; private boolean bEnableCertificateExpiry; private JCheckBox jcbEnableLastModified; @@ -763,6 +763,11 @@ private void initDisplayColumnsCard() { jcbEnableCurve = new JCheckBox(res.getString("DPreferences.jcbEnableCurve.text"), bEnableCurve); jcbEnableCurve.setSelected(bEnableCurve); + bEnableCertificateValidityStart = kstColumns.getEnableCertificateValidityStart(); + jcbEnableCertificateValidityStart = new JCheckBox(res.getString( + "DPreferences.jcbEnableCertificateValidityStart.text"), bEnableCertificateValidityStart); + jcbEnableCertificateValidityStart.setSelected(bEnableCertificateValidityStart); + bEnableCertificateExpiry = kstColumns.getEnableCertificateExpiry(); jcbEnableCertificateExpiry = new JCheckBox(res.getString("DPreferences.jcbEnableCertificateExpiry.text"), bEnableCertificateExpiry); @@ -828,17 +833,18 @@ private void initDisplayColumnsCard() { jpDisplayColumns.add(jcbEnableAlgorithm, "left, wrap"); jpDisplayColumns.add(jcbEnableKeySize, "left"); jpDisplayColumns.add(jcbEnableCurve, "left, wrap"); - jpDisplayColumns.add(jcbEnableCertificateExpiry, "left"); - jpDisplayColumns.add(jcbEnableLastModified, "left, wrap"); - jpDisplayColumns.add(jcbEnableSKI, "left"); - jpDisplayColumns.add(jcbEnableAKI, "left, wrap"); - jpDisplayColumns.add(jcbEnableIssuerDN, "left"); - jpDisplayColumns.add(jcbEnableSubjectDN, "left, wrap"); - jpDisplayColumns.add(jcbEnableIssuerCN, "left"); - jpDisplayColumns.add(jcbEnableSubjectCN, "left, wrap"); - jpDisplayColumns.add(jcbEnableIssuerO, "left"); - jpDisplayColumns.add(jcbEnableSubjectO, "left, wrap"); - jpDisplayColumns.add(jcbEnableSerialNumberHex, "left"); + jpDisplayColumns.add(jcbEnableCertificateValidityStart, "left"); + jpDisplayColumns.add(jcbEnableCertificateExpiry, "left, wrap"); + jpDisplayColumns.add(jcbEnableLastModified, "left"); + jpDisplayColumns.add(jcbEnableSKI, "left, wrap"); + jpDisplayColumns.add(jcbEnableAKI, "left"); + jpDisplayColumns.add(jcbEnableIssuerDN, "left, wrap"); + jpDisplayColumns.add(jcbEnableSubjectDN, "left"); + jpDisplayColumns.add(jcbEnableIssuerCN, "left, wrap"); + jpDisplayColumns.add(jcbEnableSubjectCN, "left"); + jpDisplayColumns.add(jcbEnableIssuerO, "left, wrap"); + jpDisplayColumns.add(jcbEnableSubjectO, "left"); + jpDisplayColumns.add(jcbEnableSerialNumberHex, "left, wrap"); jpDisplayColumns.add(jcbEnableSerialNumberDec, "left, wrap para"); jpDisplayColumns.add(jlExpirationWarnDays, "left, spanx, split"); jpDisplayColumns.add(jtfExpirationWarnDays, "wrap"); @@ -1248,6 +1254,7 @@ private void storeColumns() { bEnableEntryName = jcbEnableEntryName.isSelected(); bEnableAlgorithm = jcbEnableAlgorithm.isSelected(); bEnableKeySize = jcbEnableKeySize.isSelected(); + bEnableCertificateValidityStart = jcbEnableCertificateValidityStart.isSelected(); bEnableCertificateExpiry = jcbEnableCertificateExpiry.isSelected(); bEnableLastModified = jcbEnableLastModified.isSelected(); bEnableCurve = jcbEnableCurve.isSelected(); @@ -1266,10 +1273,10 @@ private void storeColumns() { } catch (Exception e) { expiryWarnDays = 0; } - kstColumns.setColumns(bEnableEntryName, bEnableAlgorithm, bEnableKeySize, bEnableCertificateExpiry, - bEnableLastModified, bEnableSKI, bEnableAKI, bEnableIssuerDN, bEnableSubjectDN, bEnableIssuerCN, - bEnableSubjectCN, bEnableIssuerO, bEnableSubjectO, bEnableCurve, bEnableSerialNumberHex, - bEnableSerialNumberDec, expiryWarnDays); + kstColumns.setColumns(bEnableEntryName, bEnableAlgorithm, bEnableKeySize, bEnableCertificateValidityStart, + bEnableCertificateExpiry, bEnableLastModified, bEnableSKI, bEnableAKI, bEnableIssuerDN, + bEnableSubjectDN, bEnableIssuerCN, bEnableSubjectCN, bEnableIssuerO, bEnableSubjectO, bEnableCurve, + bEnableSerialNumberHex, bEnableSerialNumberDec, expiryWarnDays); bColumnsChanged = (kstColumns.getColumns() != ist); } diff --git a/kse/src/org/kse/gui/preferences/resources.properties b/kse/src/org/kse/gui/preferences/resources.properties index 16ab63187..302c67dbb 100644 --- a/kse/src/org/kse/gui/preferences/resources.properties +++ b/kse/src/org/kse/gui/preferences/resources.properties @@ -39,6 +39,7 @@ DPreferences.jcbEnableAlgorithm.mnemonic = A DPreferences.jcbEnableAlgorithm.text = Algorithm DPreferences.jcbEnableAutoUpdateChecks.text = Automatically check for new releases of KSE every DPreferences.jcbEnableCertificateExpiry.text = Certificate Expiry +DPreferences.jcbEnableCertificateValidityStart.text = Certificate Validity Start DPreferences.jcbEnableCurve.text = Curve DPreferences.jcbEnableEntryName.text = Entry Name DPreferences.jcbEnableImportCaReplyTrustCheck.mnemonic = R diff --git a/kse/src/org/kse/gui/preferences/resources_de.properties b/kse/src/org/kse/gui/preferences/resources_de.properties index 9fd801c11..60e6c7ba9 100644 --- a/kse/src/org/kse/gui/preferences/resources_de.properties +++ b/kse/src/org/kse/gui/preferences/resources_de.properties @@ -39,6 +39,7 @@ DPreferences.jcbEnableAlgorithm.mnemonic = A DPreferences.jcbEnableAlgorithm.text = Algorithmus DPreferences.jcbEnableAutoUpdateChecks.text = Automatisch auf neue Versionen von KSE pr\u00FCfen alle DPreferences.jcbEnableCertificateExpiry.text = Ablaufdatum +DPreferences.jcbEnableCertificateValidityStart.text = G\u00FCltigkeitsbeginn DPreferences.jcbEnableCurve.text = Kurve DPreferences.jcbEnableEntryName.text = Alias-Name DPreferences.jcbEnableImportCaReplyTrustCheck.mnemonic = C diff --git a/kse/src/org/kse/gui/preferences/resources_fr.properties b/kse/src/org/kse/gui/preferences/resources_fr.properties index 14e621dbd..a748a60f9 100644 --- a/kse/src/org/kse/gui/preferences/resources_fr.properties +++ b/kse/src/org/kse/gui/preferences/resources_fr.properties @@ -40,6 +40,7 @@ DPreferences.jcbEnableAlgorithm.mnemonic = A DPreferences.jcbEnableAlgorithm.text = Algorithme DPreferences.jcbEnableAutoUpdateChecks.text = V\u00E9rifier automatiquement les mises \u00E0 jour de KSE \u00E0 une fr\u00E9quence de DPreferences.jcbEnableCertificateExpiry.text = Date d\u2019expiration +DPreferences.jcbEnableCertificateValidityStart.text = Date du d\u00E9but de la validit\u00E9 DPreferences.jcbEnableCurve.text = Courbe DPreferences.jcbEnableEntryName.text = Nom d\u2019alias DPreferences.jcbEnableImportCaReplyTrustCheck.mnemonic = R diff --git a/kse/src/org/kse/gui/resources.properties b/kse/src/org/kse/gui/resources.properties index 1b3c53dd2..e790c576f 100644 --- a/kse/src/org/kse/gui/resources.properties +++ b/kse/src/org/kse/gui/resources.properties @@ -55,46 +55,48 @@ KeyStoreTableCellRend.TrustCertEntry.tooltip = Trusted Certificate entry KeyStoreTableCellRend.Unavailable.tooltip = Value is unavailable KeyStoreTableCellRend.UnlockedEntry.tooltip = Entry is unlocked, its password has previously been entered -KeyStoreTableHeadRend.AKIColumn.tooltip = Hash of the issuer public key -KeyStoreTableHeadRend.AlgorithmColumn.tooltip = KeyStore entry's algorithm -KeyStoreTableHeadRend.CertExpiryColumn.tooltip = KeyStore entry's certificate expiry date and time -KeyStoreTableHeadRend.CertExpiryStatusColumn.tooltip = KeyStore entry's certificate expiry status -KeyStoreTableHeadRend.CurveColumn.tooltip = Elliptic Curve or algorithm -KeyStoreTableHeadRend.IssuerCNColumn.tooltip = Issuer Common Name -KeyStoreTableHeadRend.IssuerDNColumn.tooltip = Issuer Distinguished Name -KeyStoreTableHeadRend.IssuerOColumn.tooltip = Issuer Organization Name -KeyStoreTableHeadRend.KeySizeColumn.tooltip = KeyStore entry's key size in bits -KeyStoreTableHeadRend.LastModifiedColumn.tooltip = KeyStore entry's last modification date and time -KeyStoreTableHeadRend.LockStatusColumn.tooltip = KeyStore entry's lock status -KeyStoreTableHeadRend.NameColumn.tooltip = KeyStore entry's alias name -KeyStoreTableHeadRend.SKIColumn.tooltip = Hash of the subject public key -KeyStoreTableHeadRend.SubjectCNColumn.tooltip = Subject Distinguished Name -KeyStoreTableHeadRend.SubjectDNColumn.tooltip = Subject Common Name -KeyStoreTableHeadRend.SubjectOColumn.tooltip = Subject Organization Name -KeyStoreTableHeadRend.TypeColumn.tooltip = KeyStore entry's type +KeyStoreTableHeadRend.AKIColumn.tooltip = Hash of the issuer public key +KeyStoreTableHeadRend.AlgorithmColumn.tooltip = KeyStore entry's algorithm +KeyStoreTableHeadRend.CertExpiryColumn.tooltip = KeyStore entry's certificate expiry date and time +KeyStoreTableHeadRend.CertExpiryStatusColumn.tooltip = KeyStore entry's certificate expiry status +KeyStoreTableHeadRend.CertValidityStartColumn.tooltip = KeyStore entry's certificate validity start date and time +KeyStoreTableHeadRend.CurveColumn.tooltip = Elliptic Curve or algorithm +KeyStoreTableHeadRend.IssuerCNColumn.tooltip = Issuer Common Name +KeyStoreTableHeadRend.IssuerDNColumn.tooltip = Issuer Distinguished Name +KeyStoreTableHeadRend.IssuerOColumn.tooltip = Issuer Organization Name +KeyStoreTableHeadRend.KeySizeColumn.tooltip = KeyStore entry's key size in bits +KeyStoreTableHeadRend.LastModifiedColumn.tooltip = KeyStore entry's last modification date and time +KeyStoreTableHeadRend.LockStatusColumn.tooltip = KeyStore entry's lock status +KeyStoreTableHeadRend.NameColumn.tooltip = KeyStore entry's alias name +KeyStoreTableHeadRend.SKIColumn.tooltip = Hash of the subject public key +KeyStoreTableHeadRend.SubjectCNColumn.tooltip = Subject Distinguished Name +KeyStoreTableHeadRend.SubjectDNColumn.tooltip = Subject Common Name +KeyStoreTableHeadRend.SubjectOColumn.tooltip = Subject Organization Name +KeyStoreTableHeadRend.TypeColumn.tooltip = KeyStore entry's type -KeyStoreTableModel.AKIColumn = Authority Key Identifier -KeyStoreTableModel.AlgorithmColumn = Algorithm -KeyStoreTableModel.CertExpiryColumn = Certificate Expiry -KeyStoreTableModel.CertExpiryStatusColumn = Certificate Expiry Status -KeyStoreTableModel.CurveColumn = Curve -KeyStoreTableModel.IssuerCNColumn = Issuer CN -KeyStoreTableModel.IssuerDNColumn = Issuer DN -KeyStoreTableModel.IssuerOColumn = Issuer O -KeyStoreTableModel.KeyEntry = Key -KeyStoreTableModel.KeyPairEntry = Key Pair -KeyStoreTableModel.KeySizeColumn = Key Size -KeyStoreTableModel.LastModifiedColumn = Last Modified -KeyStoreTableModel.LockStatusColumn = Lock Status -KeyStoreTableModel.NameColumn = Entry Name -KeyStoreTableModel.SKIColumn = Subject Key Identifier -KeyStoreTableModel.SerialNumberDec = Serial Number (dec) -KeyStoreTableModel.SerialNumberHex = Serial Number (hex) -KeyStoreTableModel.SubjectCNColumn = Subject CN -KeyStoreTableModel.SubjectDNColumn = Subject DN -KeyStoreTableModel.SubjectOColumn = Subject O -KeyStoreTableModel.TrustCertEntry = Trusted Certificate -KeyStoreTableModel.TypeColumn = Type +KeyStoreTableModel.AKIColumn = Authority Key Identifier +KeyStoreTableModel.AlgorithmColumn = Algorithm +KeyStoreTableModel.CertExpiryColumn = Certificate Expiry +KeyStoreTableModel.CertExpiryStatusColumn = Certificate Expiry Status +KeyStoreTableModel.CertValidityStartColumn = Validity Start +KeyStoreTableModel.CurveColumn = Curve +KeyStoreTableModel.IssuerCNColumn = Issuer CN +KeyStoreTableModel.IssuerDNColumn = Issuer DN +KeyStoreTableModel.IssuerOColumn = Issuer O +KeyStoreTableModel.KeyEntry = Key +KeyStoreTableModel.KeyPairEntry = Key Pair +KeyStoreTableModel.KeySizeColumn = Key Size +KeyStoreTableModel.LastModifiedColumn = Last Modified +KeyStoreTableModel.LockStatusColumn = Lock Status +KeyStoreTableModel.NameColumn = Entry Name +KeyStoreTableModel.SKIColumn = Subject Key Identifier +KeyStoreTableModel.SerialNumberDec = Serial Number (dec) +KeyStoreTableModel.SerialNumberHex = Serial Number (hex) +KeyStoreTableModel.SubjectCNColumn = Subject CN +KeyStoreTableModel.SubjectDNColumn = Subject DN +KeyStoreTableModel.SubjectOColumn = Subject O +KeyStoreTableModel.TrustCertEntry = Trusted Certificate +KeyStoreTableModel.TypeColumn = Type KseFrame.NoDragKeyEntry.message = Key entries cannot be dragged. KseFrame.NoDragLockedKeyPairEntry.message = Locked Key Pair entries cannot be dragged.\nUnlock the entry and try again. diff --git a/kse/src/org/kse/gui/resources_de.properties b/kse/src/org/kse/gui/resources_de.properties index 96f701014..dd3264f1b 100644 --- a/kse/src/org/kse/gui/resources_de.properties +++ b/kse/src/org/kse/gui/resources_de.properties @@ -56,46 +56,48 @@ KeyStoreTableCellRend.TrustCertEntry.tooltip = Eintrag f\u00FCr vertraue KeyStoreTableCellRend.Unavailable.tooltip = Der Eintrag ist nicht verf\u00FCgbar KeyStoreTableCellRend.UnlockedEntry.tooltip = Der Eintrag ist entsperrt, weil das dazugeh\u00F6rige Passwort zuvor eingegeben wurde -KeyStoreTableHeadRend.AKIColumn.tooltip = Hash des Aussteller \u00D6ffentliche Schl\u00FCssels -KeyStoreTableHeadRend.AlgorithmColumn.tooltip = Algorithmus des ausgew\u00E4hlten Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.CertExpiryColumn.tooltip = Zertifikat Ablaufdatum und -zeit des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.CertExpiryStatusColumn.tooltip = Zertifikat-G\u00FCltigkeitsstatus des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.CurveColumn.tooltip = Elliptische Kurve oder detaillierte Algorithmus Informationen -KeyStoreTableHeadRend.IssuerCNColumn.tooltip = Aussteller Gebr\u00E4uchlicher Name -KeyStoreTableHeadRend.IssuerDNColumn.tooltip = Aussteller Distinguished Name -KeyStoreTableHeadRend.IssuerOColumn.tooltip = Aussteller Organisation -KeyStoreTableHeadRend.KeySizeColumn.tooltip = Schl\u00FCsselgr\u00F6\u00DFe in Bits des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.LastModifiedColumn.tooltip = Datum und Zeit der letzten \u00C4nderung des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.LockStatusColumn.tooltip = Sperrstatus des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.NameColumn.tooltip = Aliasname des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableHeadRend.SKIColumn.tooltip = Hash des Inhaber \u00D6ffentliche Schl\u00FCssels -KeyStoreTableHeadRend.SubjectCNColumn.tooltip = Inhaber Gebr\u00E4uchlicher Name -KeyStoreTableHeadRend.SubjectDNColumn.tooltip = Inhaber Distinguished Name -KeyStoreTableHeadRend.SubjectOColumn.tooltip = Inhaber Organisation -KeyStoreTableHeadRend.TypeColumn.tooltip = Typ des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.AKIColumn.tooltip = Hash des Aussteller \u00D6ffentliche Schl\u00FCssels +KeyStoreTableHeadRend.AlgorithmColumn.tooltip = Algorithmus des ausgew\u00E4hlten Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.CertExpiryColumn.tooltip = Zertifikat: Ablaufdatum und -zeit des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.CertExpiryStatusColumn.tooltip = Zertifikat: G\u00FCltigkeitsstatus des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.CertValidityStartColumn.tooltip = Zertifikat: Beginn des G\u00FCltigkeitsdatums und -zeit des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.CurveColumn.tooltip = Elliptische Kurve oder detaillierte Algorithmus Informationen +KeyStoreTableHeadRend.IssuerCNColumn.tooltip = Aussteller Gebr\u00E4uchlicher Name +KeyStoreTableHeadRend.IssuerDNColumn.tooltip = Aussteller Distinguished Name +KeyStoreTableHeadRend.IssuerOColumn.tooltip = Aussteller Organisation +KeyStoreTableHeadRend.KeySizeColumn.tooltip = Schl\u00FCsselgr\u00F6\u00DFe in Bits des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.LastModifiedColumn.tooltip = Datum und Zeit der letzten \u00C4nderung des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.LockStatusColumn.tooltip = Sperrstatus des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.NameColumn.tooltip = Aliasname des Eintrags im Schl\u00FCsselspeicher +KeyStoreTableHeadRend.SKIColumn.tooltip = Hash des Inhaber \u00D6ffentliche Schl\u00FCssels +KeyStoreTableHeadRend.SubjectCNColumn.tooltip = Inhaber Gebr\u00E4uchlicher Name +KeyStoreTableHeadRend.SubjectDNColumn.tooltip = Inhaber Distinguished Name +KeyStoreTableHeadRend.SubjectOColumn.tooltip = Inhaber Organisation +KeyStoreTableHeadRend.TypeColumn.tooltip = Typ des Eintrags im Schl\u00FCsselspeicher -KeyStoreTableModel.AKIColumn = Aussteller Schl\u00FCssel Kennzeichen -KeyStoreTableModel.AlgorithmColumn = Algorithmus -KeyStoreTableModel.CertExpiryColumn = Ablaufdatum des Zertifikats -KeyStoreTableModel.CertExpiryStatusColumn = Ablauf-Status des Zertifikats -KeyStoreTableModel.CurveColumn = Kurve -KeyStoreTableModel.IssuerCNColumn = Aussteller CN -KeyStoreTableModel.IssuerDNColumn = Aussteller DN -KeyStoreTableModel.IssuerOColumn = Aussteller O -KeyStoreTableModel.KeyEntry = Schl\u00FCssel -KeyStoreTableModel.KeyPairEntry = Schl\u00FCsselpaar -KeyStoreTableModel.KeySizeColumn = Schl\u00FCsselgr\u00F6\u00DFe -KeyStoreTableModel.LastModifiedColumn = Zuletzt ge\u00E4ndert -KeyStoreTableModel.LockStatusColumn = Sperrstatus -KeyStoreTableModel.NameColumn = Name des Eintrags -KeyStoreTableModel.SKIColumn = Inhaber Schl\u00FCssel Kennzeichen -KeyStoreTableModel.SerialNumberDec = Seriennummer (dez.) -KeyStoreTableModel.SerialNumberHex = Seriennummer (hex.) -KeyStoreTableModel.SubjectCNColumn = Inhaber DN -KeyStoreTableModel.SubjectDNColumn = Inhaber DN -KeyStoreTableModel.SubjectOColumn = Inhaber O -KeyStoreTableModel.TrustCertEntry = Vertrauensw\u00FCrdiges Zertifikat -KeyStoreTableModel.TypeColumn = Typ +KeyStoreTableModel.AKIColumn = Aussteller Schl\u00FCssel Kennzeichen +KeyStoreTableModel.AlgorithmColumn = Algorithmus +KeyStoreTableModel.CertExpiryColumn = Ablaufdatum des Zertifikats +KeyStoreTableModel.CertExpiryStatusColumn = Ablauf-Status des Zertifikats +KeyStoreTableModel.CertValidityStartColumn = G\u00FCltigkeitsbeginn +KeyStoreTableModel.CurveColumn = Kurve +KeyStoreTableModel.IssuerCNColumn = Aussteller CN +KeyStoreTableModel.IssuerDNColumn = Aussteller DN +KeyStoreTableModel.IssuerOColumn = Aussteller O +KeyStoreTableModel.KeyEntry = Schl\u00FCssel +KeyStoreTableModel.KeyPairEntry = Schl\u00FCsselpaar +KeyStoreTableModel.KeySizeColumn = Schl\u00FCsselgr\u00F6\u00DFe +KeyStoreTableModel.LastModifiedColumn = Zuletzt ge\u00E4ndert +KeyStoreTableModel.LockStatusColumn = Sperrstatus +KeyStoreTableModel.NameColumn = Name des Eintrags +KeyStoreTableModel.SKIColumn = Inhaber Schl\u00FCssel Kennzeichen +KeyStoreTableModel.SerialNumberDec = Seriennummer (dez.) +KeyStoreTableModel.SerialNumberHex = Seriennummer (hex.) +KeyStoreTableModel.SubjectCNColumn = Inhaber DN +KeyStoreTableModel.SubjectDNColumn = Inhaber DN +KeyStoreTableModel.SubjectOColumn = Inhaber O +KeyStoreTableModel.TrustCertEntry = Vertrauensw\u00FCrdiges Zertifikat +KeyStoreTableModel.TypeColumn = Typ KseFrame.NoDragKeyEntry.message = Eintr\u00E4ge von Schl\u00FCsseln k\u00F6nnen nicht verschoben werden KseFrame.NoDragLockedKeyPairEntry.message = Gesperrte Eintr\u00E4ge von Schl\u00FCsselpaaren k\u00F6nnen nicht verschoben werden.\nEntsperren sie den Eintrag und versuchen sie es erneut. diff --git a/kse/src/org/kse/gui/resources_fr.properties b/kse/src/org/kse/gui/resources_fr.properties index af5396979..c39d82326 100644 --- a/kse/src/org/kse/gui/resources_fr.properties +++ b/kse/src/org/kse/gui/resources_fr.properties @@ -55,46 +55,48 @@ KeyStoreTableCellRend.TrustCertEntry.tooltip = \u00C9l\u00E9ment de type KeyStoreTableCellRend.Unavailable.tooltip = \u00C9l\u00E9ment non disponible KeyStoreTableCellRend.UnlockedEntry.tooltip = L\u2019\u00E9l\u00E9ment est d\u00E9verrouill\u00E9, son mot de passe a pas \u00E9t\u00E9 saisi ant\u00E9rieurement -KeyStoreTableHeadRend.AKIColumn.tooltip = Hash de la clef publique de l\u2019\u00E9metteur (AKI) -KeyStoreTableHeadRend.AlgorithmColumn.tooltip = Algorithme de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.CertExpiryColumn.tooltip = Date et heure d\u2019expiration du certificat de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.CertExpiryStatusColumn.tooltip = Validit\u00E9 du certificat de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.CurveColumn.tooltip = Courbe Elliptique ou Algorithme -KeyStoreTableHeadRend.IssuerCNColumn.tooltip = Nom commun (CN) de l\u2019\u00E9metteur -KeyStoreTableHeadRend.IssuerDNColumn.tooltip = Nom distinctif (DN) de l\u2019\u00E9metteur -KeyStoreTableHeadRend.IssuerOColumn.tooltip = Nom de l\u2019organization \u00E9metteur -KeyStoreTableHeadRend.KeySizeColumn.tooltip = Taille de la clef de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.LastModifiedColumn.tooltip = Date et heure de derni\u00E8re modification de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.LockStatusColumn.tooltip = \u00C9tat du verrouillage de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.NameColumn.tooltip = Nom d\u2019alias de l\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableHeadRend.SKIColumn.tooltip = Hash de la clef publique du titulaire (SKI) -KeyStoreTableHeadRend.SubjectCNColumn.tooltip = Nom commun (CN) du titulaire -KeyStoreTableHeadRend.SubjectDNColumn.tooltip = Nom distinctif (DN) du titulaire -KeyStoreTableHeadRend.SubjectOColumn.tooltip = Nom de l\u2019organization titulaire -KeyStoreTableHeadRend.TypeColumn.tooltip = Type d\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.AKIColumn.tooltip = Hash de la clef publique de l\u2019\u00E9metteur (AKI) +KeyStoreTableHeadRend.AlgorithmColumn.tooltip = Algorithme de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.CertExpiryColumn.tooltip = Date et heure d\u2019expiration du certificat de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.CertExpiryStatusColumn.tooltip = Validit\u00E9 du certificat de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.CertValidityStartColumn.tooltip = Date et heure du d\u00E9but de la validit\u00E9 du certificat de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.CurveColumn.tooltip = Courbe Elliptique ou Algorithme +KeyStoreTableHeadRend.IssuerCNColumn.tooltip = Nom commun (CN) de l\u2019\u00E9metteur +KeyStoreTableHeadRend.IssuerDNColumn.tooltip = Nom distinctif (DN) de l\u2019\u00E9metteur +KeyStoreTableHeadRend.IssuerOColumn.tooltip = Nom de l\u2019organization \u00E9metteur +KeyStoreTableHeadRend.KeySizeColumn.tooltip = Taille de la clef de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.LastModifiedColumn.tooltip = Date et heure de derni\u00E8re modification de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.LockStatusColumn.tooltip = \u00C9tat du verrouillage de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.NameColumn.tooltip = Nom d\u2019alias de l\u2019\u00E9l\u00E9ment du magasin de clefs +KeyStoreTableHeadRend.SKIColumn.tooltip = Hash de la clef publique du titulaire (SKI) +KeyStoreTableHeadRend.SubjectCNColumn.tooltip = Nom commun (CN) du titulaire +KeyStoreTableHeadRend.SubjectDNColumn.tooltip = Nom distinctif (DN) du titulaire +KeyStoreTableHeadRend.SubjectOColumn.tooltip = Nom de l\u2019organization titulaire +KeyStoreTableHeadRend.TypeColumn.tooltip = Type d\u2019\u00E9l\u00E9ment du magasin de clefs -KeyStoreTableModel.AKIColumn = Identifiant clef \u00E9metteur (AKI) -KeyStoreTableModel.AlgorithmColumn = Algorithme -KeyStoreTableModel.CertExpiryColumn = Date d\u2019expiration -KeyStoreTableModel.CertExpiryStatusColumn = Validit\u00E9 du certificat -KeyStoreTableModel.CurveColumn = Courbe -KeyStoreTableModel.IssuerCNColumn = CN \u00E9metteur -KeyStoreTableModel.IssuerDNColumn = DN \u00E9metteur -KeyStoreTableModel.IssuerOColumn = O \u00E9metteur -KeyStoreTableModel.KeyEntry = Clef -KeyStoreTableModel.KeyPairEntry = Paire de clefs -KeyStoreTableModel.KeySizeColumn = Taille de clef -KeyStoreTableModel.LastModifiedColumn = Derni\u00E8re modification -KeyStoreTableModel.LockStatusColumn = Verrouillage -KeyStoreTableModel.NameColumn = Nom d\u2019alias -KeyStoreTableModel.SKIColumn = Identifiant clef titulaire (SKI) -KeyStoreTableModel.SerialNumberDec = Num\u00E9ro de s\u00E9rie (d\u00E9cimal) -KeyStoreTableModel.SerialNumberHex = Num\u00E9ro de s\u00E9rie -KeyStoreTableModel.SubjectCNColumn = CN titulaire -KeyStoreTableModel.SubjectDNColumn = DN titulaire -KeyStoreTableModel.SubjectOColumn = O titulaire -KeyStoreTableModel.TrustCertEntry = Certificat de confiance -KeyStoreTableModel.TypeColumn = Type +KeyStoreTableModel.AKIColumn = Identifiant clef \u00E9metteur (AKI) +KeyStoreTableModel.AlgorithmColumn = Algorithme +KeyStoreTableModel.CertExpiryColumn = Date d\u2019expiration +KeyStoreTableModel.CertExpiryStatusColumn = Validit\u00E9 du certificat +KeyStoreTableModel.CertValidityStartColumn = D\u00E9but de la validit\u00E9 +KeyStoreTableModel.CurveColumn = Courbe +KeyStoreTableModel.IssuerCNColumn = CN \u00E9metteur +KeyStoreTableModel.IssuerDNColumn = DN \u00E9metteur +KeyStoreTableModel.IssuerOColumn = O \u00E9metteur +KeyStoreTableModel.KeyEntry = Clef +KeyStoreTableModel.KeyPairEntry = Paire de clefs +KeyStoreTableModel.KeySizeColumn = Taille de clef +KeyStoreTableModel.LastModifiedColumn = Derni\u00E8re modification +KeyStoreTableModel.LockStatusColumn = Verrouillage +KeyStoreTableModel.NameColumn = Nom d\u2019alias +KeyStoreTableModel.SKIColumn = Identifiant clef titulaire (SKI) +KeyStoreTableModel.SerialNumberDec = Num\u00E9ro de s\u00E9rie (d\u00E9cimal) +KeyStoreTableModel.SerialNumberHex = Num\u00E9ro de s\u00E9rie +KeyStoreTableModel.SubjectCNColumn = CN titulaire +KeyStoreTableModel.SubjectDNColumn = DN titulaire +KeyStoreTableModel.SubjectOColumn = O titulaire +KeyStoreTableModel.TrustCertEntry = Certificat de confiance +KeyStoreTableModel.TypeColumn = Type KseFrame.NoDragKeyEntry.message = Les clefs list\u00E9es ne peuvent pas faire l\u2019objet d\u2019un glisser\u2010d\u00E9poser. KseFrame.NoDragLockedKeyPairEntry.message = Les clefs verrouill\u00E9es de la liste ne peuvent pas faire l\u2019objet d\u2019un glisser\u2010d\u00E9poser.\nVeuillez r\u00E9essayer apr\u00E8s d\u00E9verrouillage.