Apple KeychainStore: Can it be used to access the MacOS trust store?

Alexey Bakhtin alexey at azul.com
Wed Feb 14 14:43:44 UTC 2024


Hello Graham,

This functionality is under review now at https://github.com/openjdk/jdk/pull/16722
This patch proposes access to the MacOS trust store using new java KeychainStore-Root keystore.
Feel free to review and comment.

Regards
Aleksei

> On 14 Feb 2024, at 02:16, Graham Leggett <minfrin at sharp.fm> wrote:
> 
> Caution: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> Hi all,
> 
> I am trying to make life easier for Apple and Windows users by providing functionality to use Window-MY and Windows-ROOT, however I got stuck with KeychainStore.
> 
> keyStore = KeyStore.getInstance("KeychainStore", "Apple");
> keyStore.load(null, null);
> keyManagerFactory = KeyManagerFactory
> .getInstance("PKIX");
> keyManagerFactory.init(keyStore, keyPassphrase);
> trustStore = KeyStore.getInstance("KeychainStore", "Apple");
> trustStore.load(null, null);
> trustManagerFactory = TrustManagerFactory
> .getInstance("PKIX");
> trustManagerFactory.init(trustStore);
> ctx = SSLContext.getInstance("TLS");
> ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
> factory = ctx.getSocketFactory();
> 
> The problem is that when connecting to an TLS endpoint with a publicly issued certificate, Java cannot validate the server’s certificate as follows;
> 
> Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
> 
> It looks like the functionality to access the MacOS trust store is missing, which is counterintuitive and makes it seem like I doing something wrong.
> 
> Digging into the JDK code it leads us here:
> 
> https://github.com/openjdk/jdk/blob/master/src/java.base/macosx/native/libosxsecurity/KeystoreImpl.m
> 
> Specifically, what I don’t see is a call to SecTrustCopyAnchorCertificates:
> 
> https://developer.apple.com/documentation/security/1401507-sectrustcopyanchorcertificates?language=objc
> 
> Am I right in understanding that java can access certificates in a keychain, but not certificates in the trust store?
> 
> Does it make sense to amend “KeychainStore” to allow access to the trust store, or does macos need a dedicated keystore like Windows-ROOT?
> 
> Regards,
> Graham
>> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/security-dev/attachments/20240214/41f3fe6b/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Message signed with OpenPGP
URL: <https://mail.openjdk.org/pipermail/security-dev/attachments/20240214/41f3fe6b/signature.asc>


More information about the security-dev mailing list