provider registration

Bernd Eckenfels ecki at
Sat Mar 3 07:31:11 UTC 2018

Hello Brad,

thanks for the answer. Yes I was talking about the security.provider properties. 

It is good to know that it wont work with jlink/jmod. The JCA/JCE documentation Looks quite good to follow.

A text similiar to this would complete the picture:

Note when changing the list of Providers in file, that this requires the signed Provider JAR to be present on the class- or module path of the JVM. When the Provider class cannot be loaded, it will be skipped.

The extensions mechanism/library was deprecated in Java 8 and removed in Java 9. It can no longer be used to store your custom JCE Provider JAR. Storing JCE providers in custom runtime Images (JMOD files bundled with the JLink tool) is only possible if the provider does not provide Ciphers, Key Agreements or MACs (because there is no codesigning feature for jmod files).


Von: Brad Wetmore
Gesendet: Freitag, 2. März 2018 01:01
An: Bernd; OpenJDK Dev list
Betreff: Re: provider registration

On 2/28/2018 8:36 AM, Bernd wrote:
> Hello,
> there was a thread on BouncyCastle's crypto-dev mailing list how to use 
> a custom JCA provider with Java 9+. Since there is no alternative for 
> the lib/ext extension mechanism this is a bit tricky (if you do want to 
> make the extension in the file permanent).
> There are multiple alternatives (adding to module path, to classpath, 
> using service loader or programmatic registration). Those are described 
> in the actual documentation.

Hopefully it's clear.  There was a lot of moving parts and sharp edges 
as JDK 9 came to a close.  Comments welcome of course.

> However expanding the list

To be clear, when you say "expanding the list", you mean 
adding an entry like:


> does not mention explicitely 
> that without the extension mechanism this produces a java home which 
> wont start without modifying the module path.

The JDK should still start, but it wouldn't be able to find MyProvider 
if it's not in either the class or module path.

> Not sure if there is actually a default way to storesuch a "security 
> provider module" 

Not aware of anything for JDK 9+, short of putting your provider into 
the module/classpath directory.  As you note, the extension 
mechanism/directory was removed in the JDK 9 (see JEP 220).

> without using for example jlink to build a new image 
> (or add the -mp argument).

Please note from the Provider documentation:

     You can link a provider in a custom runtime image with the jlink
     command as long as it doesn't have a Cipher, KeyAgreement, or MAC

Providers that don't have Cipher/KeyAgreement/MAC implementation can be 

However, providers providing Cipher/KeyAgreement/MAC implementations 
must be signed using a valid certificate to pass the export tests in 
implementations like Oracle JDK.  We only support signed modular jars 
(module-path) and signed jars (classpath).  There is not a signed JMOD 
feature, and thus jlink can't be used to create an image that will pass 
the export tests.

> Maybe this should be stated explicite?
> "Starting with Java 9 there is no extension mechanism where you could 
> install the provider JAR permanently. Therefore expanding the 
> leaves typically a incomplete java home and should be 
> avoided. Permanently installing an additional module could be done with 
> a custom jlink image."
> (I havent tested if JLink works, BCProv is not yet modularized or 
> service loader enabled. Classpath and programmatic registration works fine).
> Is that correct?

We could add some wording here to talk about the removal of the 
extension mechanism.

Hope that helps.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the security-dev mailing list