Как сказал @Nadir, есть KeyUsage
и необязательно ExtendedKeyUsage
в структуре сертификата, вы можете проверить это на RFC 5280 где KeyUsage
ASN1 формат определяется как следующим образом:
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1), -- recent editions of X.509 have
-- renamed this bit to contentCommitment
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8) }
и ExtendedKeyUsage
определяется как SEQUENCE
из Object identifiers OIDs:
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
KeyPurposeId ::= OBJECT IDENTIFIER
, где это возможно OIDs являются:
id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }
id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }
id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }
Как попросить проверить, какой секретный ключ, связанные с этим сертификатом выдаются для выполнения цифровых подписей с помощью Java можно использовать класс java.security.cert.X509Certificate
:
import java.security.KeyStore;
import java.security.cert.X509Certificate;
KeyStore ks = ...;
X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
boolean[] keyUsage = certificate.getKeyUsage();
// keyUsage[0] --> digitalSignature
// keyUsage[1] --> non repudiation
if(keyUsage[0] || keyUsage[1]){
// certificate is issued to perform signature
}
Необязательно, если вам это нужно, вы можете также получить доступ к ExtendedKeyUsage
с тем же классом:
X509Certificate certificate =...;
certificate .getExtendedKeyUsage();
Надеется, что это помогает,
Как получить эти значения? когда я загружаю сертификат: сертификат сертификата = ks.getCertificate (aliass); я не получаю .getKeyUsage(); для этого нужно иметь дело с сертификатами X509? @nadir – caniaskyouaquestion
, когда я передал его X509 и использовал getKeyUsage(). toString(); Я получаю что-то вроде этого: Z @ 77ef6359 – caniaskyouaquestion
Взгляните на проект portecle, это хороший инструмент, который показывает использование ключей и расширенные действия ключа. Вы можете проверить, как они берут эту информацию, глядя на свои источники на sourceforge http://sourceforge.net/p/portecle/code/ci/master/tree/ – Nadir