Источник Java, создающий и хранящий ключи и сертификаты, аналогичен этому:
Код: Выделить всё
KeyStore keyStore = KeyStore.getInstance("PKCS11", "SunPKCS11-libtpm2");
keyStore.load(null, "userpin".toCharArray());
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "SunPKCS11-libtpm2");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
keyStore.setKeyEntry("WorkstationAuthentication", keyPair.getPrivate(), null, getCertificates());
Код: Выделить всё
# pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so --slot-index=0 --list-objects --login
Using slot with index 0 (0x1)
Logging in to "myfirsttoken".
Please enter User PIN:
Public Key Object; RSA 2048 bits
label:
Usage: encrypt, verify
Access: local
Private Key Object; RSA
label:
ID: 534b5332303038576f726b73746174696f6e41757468656e7469636174696f6e
Usage: decrypt, sign
Access: always sensitive, never extractable, local
Allowed mechanisms: RSA-X-509,RSA-PKCS-OAEP,RSA-PKCS,SHA1-RSA-PKCS,SHA256-RSA-PKCS,SHA384-RSA-PKCS,SHA512-RSA-PKCS,RSA-PKCS-PSS,SHA1-RSA-PKCS-PSS,SHA256-RSA-PKCS-PSS,SHA384-RSA-PKCS-PSS,SHA512-RSA-PKCS-PSS
Certificate Object; type = X.509 cert
label: WorkstationAuthentication
subject: DN:
ID: 534b5332303038576f726b73746174696f6e41757468656e7469636174696f6e
Certificate Object; type = X.509 cert
label:
subject: DN: DC=com, DC=example, CN=example-CA
ID: 636e3d736173636572742d63612c64633d233136303737333631373336333635373237342c64633d2331363032366636392f636e3d736173636572742d63612c64633d233136303737333631373336333635373237342c64633d2331363032366636392f3332333331303437363031363137343435323138303332383239393236343439353035313332
Код: Выделить всё
if (keyStore.containsAlias("WorkstationAuthentication")) {
keyStore.deleteEntry("WorkstationAuthentication");
}
Код: Выделить всё
# pkcs11-tool --module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so --slot-index=0 --list-objects --login
Using slot with index 0 (0x1)
Logging in to "myfirsttoken".
Please enter User PIN:
Public Key Object; RSA 2048 bits
label:
Usage: encrypt, verify
Access: local
Я мог бы удалить открытый ключ с помощью pkcs11-tool, но мне хотелось бы удалить его в Java.
Итак, как же кто-то может удалить открытый ключ? ключ от токена в Java? Или как кто-то может помешать сохранению открытого ключа в токене? Если я правильно понимаю, нет смысла хранить открытый ключ в токене, поскольку открытый ключ содержится в сертификате.
Подробнее здесь: https://stackoverflow.com/questions/790 ... en-in-java
Мобильная версия