|
1 | 1 | package com.wechat.pay.java.core.certificate; |
2 | 2 |
|
3 | | -import com.wechat.pay.java.core.exception.ValidationException; |
4 | 3 | import com.wechat.pay.java.core.util.PemUtil; |
5 | 4 | import java.security.cert.*; |
6 | | -import java.util.*; |
7 | 5 |
|
8 | 6 | final class RSACertificateHandler implements CertificateHandler { |
9 | 7 |
|
10 | | - private static final X509Certificate tenpayCACert = |
11 | | - PemUtil.loadX509FromString( |
12 | | - "-----BEGIN CERTIFICATE-----\n" |
13 | | - + "MIIEcDCCA1igAwIBAgIUG9QiDlDbwEsGrTl1SYRsAcPo69IwDQYJKoZIhvcNAQEL\n" |
14 | | - + "BQAwcDELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM\n" |
15 | | - + "E0NoaW5hIFRydXN0IE5ldHdvcmsxLjAsBgNVBAMMJWlUcnVzQ2hpbmEgQ2xhc3Mg\n" |
16 | | - + "MiBFbnRlcnByaXNlIENBIC0gRzMwHhcNMTcwODA5MDkxNTU1WhcNMzIwODA5MDkx\n" |
17 | | - + "NTU1WjBeMQswCQYDVQQGEwJDTjETMBEGA1UEChMKVGVucGF5LmNvbTEdMBsGA1UE\n" |
18 | | - + "CxMUVGVucGF5LmNvbSBDQSBDZW50ZXIxGzAZBgNVBAMTElRlbnBheS5jb20gUm9v\n" |
19 | | - + "dCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvnPD6k39BdPYAH\n" |
20 | | - + "+6lnWPjuHH+2pcmZUf2E8cNFQFNr+ECRZylYV2iKyItCQt3I2/7VIDZl6aR9TE7n\n" |
21 | | - + "sZrtSmOXCw635QOrq2yF9LTSDotAhf3ER0+216w3age/VzGcNVQpTf6gRCHCuQIk\n" |
22 | | - + "8pe/oh06JagGvX0wERa+I6NfuG58ZHQY9d6RqLXKQl0Up95v73HDsG487z8k6jcn\n" |
23 | | - + "qpGngmHQxdWiWRJugqxNRUD+awv2/DUsqGOffPX4jzJ6rLSJSlQXvuniDYxmaiaD\n" |
24 | | - + "cK0bUbB5aM+1zMwogoHSYxWj/6B+vgcnHQCUrwGdiQR5+F+yRWzy5bO09IzaFgeO\n" |
25 | | - + "PNPLPOsCAwEAAaOCARIwggEOMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/\n" |
26 | | - + "BAQDAgEGMCAGA1UdEQQZMBekFTATMREwDwYDVQQDDAhzd2JlLTI2NjAdBgNVHQ4E\n" |
27 | | - + "FgQUTFo4GLdm9oHX52HcWnzuL4tui2gwHwYDVR0jBBgwFoAUK1vVxWgI69vN5LA5\n" |
28 | | - + "MqJf/8dPmEUwRgYDVR0gBD8wPTA7BgoqgRyG7xcBAQECMC0wKwYIKwYBBQUHAgEW\n" |
29 | | - + "H2h0dHBzOi8vd3d3Lml0cnVzLmNvbS5jbi9jdG5jcHMwPgYDVR0fBDcwNTAzoDGg\n" |
30 | | - + "L4YtaHR0cDovL3RvcGNhLml0cnVzLmNvbS5jbi9jcmwvaXRydXNjMmNhZzMuY3Js\n" |
31 | | - + "MA0GCSqGSIb3DQEBCwUAA4IBAQBwZhL/eiOQmMyo1D0IR9mu1DPWl5J3XXhjc4R6\n" |
32 | | - + "mFgsN/FCeVP9M4U9y2FJH6i5Ha5YCecKGw5pwhA0rjZr/6okWwo22GF+nzI/gQiz\n" |
33 | | - + "6ugAKs5VjFbeiEb04Ncz4HT8FP1idK3tyCjqCUTkLNt0U3tR7wy26hgOqlT2wCZ9\n" |
34 | | - + "X4MfT8dUMdt9nCZx4ujN5yZOzaLOCHmzoGDGxgKg91bbu0TG2Yzd2ylhrxxRtFH9\n" |
35 | | - + "aZ/J1x5UoF7uwhTM8P92DuAldWC1/bX1kciOtQvQEZeAy+9y/1BtFxoBnmDxnqkX\n" |
36 | | - + "+lirIUYTLDaL7HaLrOLECUlaxZCU/Nkwm3tmqQxtCh+XQBdd\n" |
37 | | - + "-----END CERTIFICATE-----"); |
38 | | - |
39 | | - private static final Set<TrustAnchor> trustAnchor = |
40 | | - new LinkedHashSet<>(Collections.singletonList(new TrustAnchor(tenpayCACert, null))); |
41 | | - |
42 | 8 | @Override |
43 | 9 | public X509Certificate generateCertificate(String certificate) { |
44 | 10 | return PemUtil.loadX509FromString(certificate); |
45 | 11 | } |
46 | 12 |
|
47 | 13 | @Override |
48 | 14 | public void validateCertPath(X509Certificate certificate) { |
49 | | - try { |
50 | | - PKIXParameters params = new PKIXParameters(trustAnchor); |
51 | | - params.setRevocationEnabled(false); |
52 | | - |
53 | | - List<X509Certificate> certs = new ArrayList<>(); |
54 | | - certs.add(certificate); |
55 | | - |
56 | | - CertificateFactory cf = CertificateFactory.getInstance("X.509"); |
57 | | - CertPath certPath = cf.generateCertPath(certs); |
58 | | - |
59 | | - CertPathValidator validator = CertPathValidator.getInstance("PKIX"); |
60 | | - validator.validate(certPath, params); |
61 | | - } catch (Exception e) { |
62 | | - throw new ValidationException( |
63 | | - String.format( |
64 | | - "certificate[%s] validation failed: %s", |
65 | | - PemUtil.getSerialNumber(certificate), e.getMessage()), |
66 | | - e); |
67 | | - } |
| 15 | + // 为防止证书过期导致验签失败,从而影响业务,后续不再验证证书信任链 |
68 | 16 | } |
69 | 17 | } |
0 commit comments