ДА вы можете создать KeyStore
из сертификата НО вы не можете использовать его для аутентификации клиента или взаимной аутентификации.
Java использует класс KeyStore
и связанные файлы для хранения (в общем) трех разных, хотя и связанных между собой видов вещей , как подробно описано в Javadoc для класса . Для аутентификации у вас должен быть PrivateKeyEntry, который содержит, как можно предположить из его имени, закрытый ключ, ПЛЮС, по крайней мере, один сертификат и обычно цепочку из нескольких сертификатов. TrustedCertEntry используется для аутентификации других сторон, и, в частности, другой конечной точки (однорангового) соединения SSL / TLS; когда вы являетесь клиентом SSL / TLS, как здесь, TrustedCertEntry используется для аутентификации сервера путем проверки его сертификата. (Третья возможность, SecretKeyEntry, не используется для SSL / TLS и даже не поддерживается типом хранилища ключей PKCS12, как это реализовано в Java и обычно используется.)
С помощью объекта X509Certificate
вы можете создать TrustedCertEntry, и код, полученный из GPI, делает это. TrustedCertEntry (в KeyStore
) может использоваться только для аутентификации другой стороны, в этой ситуации сервера. Чтобы аутентифицировать себя, клиента, до сервера, вам нужен не просто сертификат, а личный ключ и цепочка сертификатов, упакованные как PrivateKeyEntry, из которых вы создаете KeyManager
, вставляемый в SSLContext
и используется JSSE в соответствии с вашим первым кодом.
AFAICS Azure хранилище представляет ключи как com.microsoft.azure.keyvault.webkey.JSONWebKey , которое, по-видимому, ограничено RSA или AES. Если RSA, есть два toRSA
метода (перегрузки), которые из описания должны создать KeyPair, который, я полагаю, означает java.security.KeyPair
, содержащий нужный вам закрытый ключ, если только нет ограничений, не указанных в том месте, где я смотрел. Я не вижу способа получить цепочку сертификатов напрямую, но, похоже, записи сертификатов имеют ссылки на издателей, которых должно быть достаточно для построения цепочки, хотя я не в состоянии сам это проверить / проверить.