Selecting private key with Windows-MY
Sean Mullan
sean.mullan at oracle.com
Thu Jun 6 12:05:26 UTC 2019
Not sure but you could try running with -Djava.security.debug=all on the
java command line and see if you see anything unusual in the output or
delays/timeouts (as compared with PKCS12).
--Sean
On 6/5/19 12:25 PM, Michael Osipov wrote:
> Folks,
>
> I am trying to perform TLS auth with a PKCS12 and Windows-MY keystores
> with HttpClient 4.5.6 + Java 8, Update 212 in Windows 7.
>
> While with the .p12 (contains one key and its cert) file everything goes
> smoothly and fast, I am having trouble with Windows-MY with my smartcard.
> Loading the store with KeyStore.getInstance("Windows-MY", "SunMSCAPI")
> takes very long (compared to PKCS12) -- seconds.
>
> Another issue is the alias selection. While PKCS12 works just with:
>> SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore,
>> null).build();
>
> Windows-MY just won't. I have to fiddle and search until I came up
> selecting the key myself with:
>> SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore,
>> null, new PrivateKeyStrategy() {
>> @Override
>> public String chooseAlias(Map<String, PrivateKeyDetails> aliases,
>> Socket socket) {
>> for (String alias : aliases.keySet()) {
>> PrivateKeyDetails privateKeyDetails = aliases.get(alias);
>> for (X509Certificate certificate :
>> privateKeyDetails.getCertChain()) {
>> try {
>> certificate.checkValidity();
>> List<String> extKeyUsage = certificate.getExtendedKeyUsage();
>> if (extKeyUsage != null &&
>> extKeyUsage.contains("1.3.6.1.5.5.7.3.2"))
>> return alias;
>> } catch (CertificateExpiredException |
>> CertificateNotYetValidException | CertificateParsingException e) {
>> continue;
>> }
>> }
>> }
>>
>> return null;
>> }
>> }).build();
>
> I am quite certain thas this is not HttpClient-related, but purely a
> provider issue, especially because I have found this [1] answer by Oleg
> Kalnichevski.
>
> If I use curl with Schannel from the command prompt the smartcard prompt
> comes pretty fast and I do not need to provide any key alias. So, there
> is some room for improvement.
>
> Does someone have an explanation for this? How can this be made better?
> Waiting for seconds and iterating for the proper OID simply don't look
> right. Note that Windows-MY contains only one key from my smartcard to
> perform secure authentication other keys have already expired.
>
> Michael
>
> [1] https://stackoverflow.com/a/37775765/696632
More information about the security-dev
mailing list