Как проверить сертификат с правами root - PullRequest
0 голосов
/ 28 мая 2019

У меня есть самопроверкаемый сертификат корневого центра сертификации, и корневой центр сертификации может выдать подписанный сертификат, оба используют алгоритм подписи: SHA256WITHECDSA

, когда я использую openssl verify -verbose -CAfile ./localhost-7054.pem ./cert.pem, он говорит ./cert.pem: OK

Когда я использовал код Java для проверки, результаты были разочаровывающими. Вот мой код, может ли кто-нибудь мне помочь?

public void test() throws Exception {

        String orgPath = "C:\\Disk\\other\\test\\peerOrganizations\\org1.cnabs.com\\users\\Admin@org1.cnabs.com\\msp\\";
        String caPath = "C:\\Disk\\other\\test\\peerOrganizations\\org1.cnabs.com\\users\\Admin@org1.cnabs.com\\msp\\";

        JcaX509CertificateConverter converter = new JcaX509CertificateConverter().setProvider("BC");

        X509CertificateHolder orgHolder = getCertificate(orgPath, "signcerts");
        X509Certificate orgX509 = converter.getCertificate(orgHolder);

        X509CertificateHolder caHolder = getCertificate(caPath, "cacerts");
        X509Certificate caX509 = converter.getCertificate(caHolder);

        // exception: certificate does not verify with supplied key
        orgX509.verify(caX509.getPublicKey());
    }

Вот код ca в формате pem:

-----BEGIN CERTIFICATE-----
MIICFzCCAb2gAwIBAgIUDxMZ0vUzR0+rXeF7g5JxE8rVbbIwCgYIKoZIzj0EAwIw
aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt
Y2Etc2VydmVyMB4XDTE5MDUyODEyNTYwMFoXDTM0MDUyNDEyNTYwMFowaDELMAkG
A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl
cmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMtY2Etc2Vy
dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJjvObbd9JPeyyxkckVutSN+F
e1Lzukj86byHXwLN4ycsPGQHxChX7+d29mPRlLk6phpd2a04qlLkzmHaggYdQKNF
MEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE
FOkaD9beSTmpBruJEkATsyJhS7RIMAoGCCqGSM49BAMCA0gAMEUCIQC4GMwPWZPA
6ldjFjzeyhcfAYarfv9HIiROsWA5JsluCwIgeYA0tvBYLJWEAY1P7jqTvhL1as4T
+FRbmaqpy0x+2M4=
-----END CERTIFICATE-----

И подписанный сертификат в формате pem:

-----BEGIN CERTIFICATE-----
MIIDATCCAqegAwIBAgIUQ2+E2w4UzqnFKJf/fLQBEDg520QwCgYIKoZIzj0EAwIw
aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt
Y2Etc2VydmVyMB4XDTE5MDUyODEzMDkwMFoXDTIwMDUyNzEzMTQwMFowgZMxCzAJ
BgNVBAYTAlVTMRcwFQYDVQQIEw5Ob3J0aCBDYXJvbGluYTEUMBIGA1UEChMLSHlw
ZXJsZWRnZXIxNjANBgNVBAsTBmNsaWVudDAKBgNVBAsTA2NvbTAMBgNVBAsTBWNu
YWJzMAsGA1UECxMEb3JnMTEdMBsGA1UEAwwUQWRtaW5Ab3JnMS5jbmFicy5jb20w
WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASQx4A/d1Oux59CUQ/6aRcY/S72KdBp
wHA3EPzTee+bPOd4CVmbPLw5dBgKw2nLmoYRjaqKypfpA02GLTVHMU2co4IBATCB
/jAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUH3XSkfVy
bG5UEGjFFlr1d5SlHWgwHwYDVR0jBBgwFoAU6RoP1t5JOakGu4kSQBOzImFLtEgw
FwYDVR0RBBAwDoIMZTMxYTA3ZjkwNmM0MIGEBggqAwQFBgcIAQR4eyJhdHRycyI6
eyJoZi5BZmZpbGlhdGlvbiI6ImNvbS5jbmFicy5vcmcxIiwiaGYuRW5yb2xsbWVu
dElEIjoiQWRtaW5Ab3JnMS5jbmFicy5jb20iLCJoZi5UeXBlIjoiY2xpZW50Iiwi
cm9sZSI6ImFkbWluIn19MAoGCCqGSM49BAMCA0gAMEUCIQD2Z/hOz7dU6LozA+/E
4peBek58BBEbLql7YbQvBb74DQIgd9epGAAxWWhZyNWBr492ivR6aJT4A+BVdNMK
UEDirqk=
-----END CERTIFICATE-----

Мне просто нужно убедиться, что подписанный сертификат действителен или нет в Java , Кто-нибудь может мне помочь?

...