Используйте IBM JDK с JCE-провайдером, подписанным с помощью Oracle JCE Code Signing CA - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь использовать пользовательский поставщик JCE с IBM JDK 1.8. Поставщик JCE подписан с помощью Oracle Code Signing CA, но у JDK есть проблема с проверкой подписи jar.

Я предполагаю, что где-то в пакете jdk есть хранилище ключей со старым ЦС для подписи кода Oracle JCE, возможно, мне придется заменить сертификат ЦС более новым, так как провайдер недавно подписался с использованием более нового сертификата. И это не в магазине Cacerts. Обратите внимание, что тот же код и провайдер прекрасно работают с Oracle jdk 7,8 и 11.

Пример кода, который вызывает ошибку. (Фактический код отличается, но имеет те же симптомы)

import javax.crypto.KeyGenerator;

public class Main {

    public static void main(String[] args) {
        try {
            KeyGenerator kg = KeyGenerator.getInstance("AES", "nCipherKM");
            System.out.println("Provider: " + kg.getProvider().toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Выход:

java.security.NoSuchProviderException: JCE cannot authenticate the provider nCipherKM
    at javax.crypto.b.a(Unknown Source)
    at javax.crypto.KeyGenerator.getInstance(Unknown Source)
    at Main.main(Main.java:7)
Caused by: java.util.jar.JarException: file:/opt/ibm/java-x86_64-80/jre/lib/ext/nCipherKM.jar is not signed by a trusted signer.
    at javax.crypto.a.a(Unknown Source)
    at javax.crypto.a.a(Unknown Source)
    at javax.crypto.a.a(Unknown Source)
    at javax.crypto.b.b(Unknown Source)
    at javax.crypto.b.a(Unknown Source)
    ... 3 more

Process finished with exit code 0

вывод jarsigner при попытке проверить подпись провайдера:

$ /opt/ibm/java-x86_64-80/bin/java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 8.0.5.35 - pxa6480sr5fp35-20190418_01(SR5 FP35))
IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190417_414854 (JIT enabled, AOT enabled)
OpenJ9   - 777635f
OMR      - 16b77d7
IBM      - 72459d3)
JCL - 20190409_01 based on Oracle jdk8u211-b25

$ /opt/ibm/java-x86_64-80/bin/jarsigner -verify -certs /opt/ibm/java-x86_64-80/jre/lib/ext/nCipherKM.jar 

jar verified.

Warning: 
This jar contains entries whose certificate chain is invalid. Reason: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is: 
    java.security.cert.CertPathValidatorException: The certificate issued by CN=JCE Code Signing CA, OU=Java Software Code Signing, O=Oracle Corporation is not trusted; internal cause is: 
    java.security.cert.CertPathValidatorException: Certificate chaining error

Re-run with the -verbose and -certs options for more details.
...