через bouncycastle страницу Wiki я смог понять, как создать корневой сертификат X.509 и запрос сертификации, но я действительно не совсем понимаю, как продолжить двигаться понятие - и программирование мудрого после этого.
Позволяет предполагают, что сторона A делает запрос сертификата и получает его клиентский сертификат от Приблизительно. Как некоторые могут праздновать, B проверяют сертификат A? Какой сертификат делает потребность? Корневой сертификат? 'Нормальный' клиентский сертификат?
И как проверка работает над программированием уровня, если мы предполагаем, что A имеет, успешно отправляют его сертификат в DER или формате PEM к B?
Любая справка очень ценится.
С наилучшими пожеланиями, ограбьте
С точки зрения программиста, для проверки сертификата X.509 требуется несколько вещей.
При наличии этих входных данных можно использовать встроенную поддержку PKIX для построения и проверки пути к сертификату.
/* Givens. */
InputStream trustStoreInput = ...
char[] password = ...
List<X509Certificate> chain = ...
Collection<X509CRL> crls = ...
/* Construct a valid path. */
KeyStore anchors = KeyStore.getInstance(KeyStore.getDefaultType());
anchors.load(trustStoreInput, password);
X509CertSelector target = new X509CertSelector();
target.setCertificate(chain.get(0));
PKIXBuilderParameters params = new PKIXBuilderParameters(anchors, target);
CertStoreParameters intermediates = new CollectionCertStoreParameters(chain)
params.addCertStore(CertStore.getInstance("Collection", intermediates));
CertStoreParameters revoked = new CollectionCertStoreParameters(crls);
params.addCertStore(CertStore.getInstance("Collection", revoked));
CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
/*
* If build() returns successfully, the certificate is valid. More details
* about the valid path can be obtained through the PKIXBuilderResult.
* If no valid path can be found, a CertPathBuilderException is thrown.
*/
PKIXBuilderResult r = (PKIXBuilderResult) builder.build(params);
Важно отметить, что если путь не может быть найден, вы не получите много информации о причине. Это может расстраивать, но это так по замыслу. В общем, есть много потенциальных путей. Если все они потерпят неудачу по разным причинам, как строитель пути решит, о чем сообщить в качестве причины?
Хорошо, идея CA заключается в следующем:
На программном уровне это реализуется путем чтения сертификата X.509 и определения того, кем должен быть ЦС. Учитывая отпечаток этого CA, вы находите его в своей базе данных и проверяете подпись. Если он совпадает, у вас есть цепочка доверия.
Это работает, потому что, как я уже сказал, только центр сертификации может создать цифровую подпись, но любой может ее проверить. Это полная противоположность концепции шифрования. Что вы делаете, так это «шифруете с помощью закрытого ключа» данные, которые хотите подписать, и проверяете, что «расшифровка с помощью открытого ключа» соответствует имеющимся у вас данным.