55
55
import org .eclipse .californium .scandium .dtls .x509 .NewAdvancedCertificateVerifier ;
56
56
import org .eclipse .californium .scandium .dtls .x509 .SingleCertificateProvider ;
57
57
import org .eclipse .californium .scandium .dtls .x509 .StaticNewAdvancedCertificateVerifier ;
58
- import org .eclipse .leshan .client .californium .CaConstraintCertificateVerifier ;
59
58
import org .eclipse .leshan .client .californium .CaliforniumConnectionController ;
60
- import org .eclipse .leshan .client .californium .DomainIssuerCertificateVerifier ;
61
- import org .eclipse .leshan .client .californium .ServiceCertificateConstraintCertificateVerifier ;
62
- import org .eclipse .leshan .client .californium .TrustAnchorAssertionCertificateVerifier ;
63
59
import org .eclipse .leshan .client .californium .endpoint .coap .CoapClientEndpointFactory ;
64
60
import org .eclipse .leshan .client .endpoint .ClientEndpointToolbox ;
61
+ import org .eclipse .leshan .client .security .CertificateVerifierFactory ;
65
62
import org .eclipse .leshan .client .servers .LwM2mServer ;
66
63
import org .eclipse .leshan .client .servers .ServerInfo ;
67
- import org .eclipse .leshan .core .CertificateUsage ;
68
64
import org .eclipse .leshan .core .SecurityMode ;
69
65
import org .eclipse .leshan .core .californium .DefaultExceptionTranslator ;
70
66
import org .eclipse .leshan .core .californium .ExceptionTranslator ;
71
67
import org .eclipse .leshan .core .californium .Lwm2mEndpointContextMatcher ;
72
68
import org .eclipse .leshan .core .californium .identity .IdentityHandler ;
69
+ import org .eclipse .leshan .core .californium .security .LwM2mCertificateVerifier ;
73
70
import org .eclipse .leshan .core .endpoint .EndpointUriUtil ;
74
71
import org .eclipse .leshan .core .endpoint .Protocol ;
75
72
import org .eclipse .leshan .core .peer .IpPeer ;
80
77
import org .eclipse .leshan .core .request .exception .TimeoutException ;
81
78
import org .eclipse .leshan .core .request .exception .TimeoutException .Type ;
82
79
import org .eclipse .leshan .core .security .certificate .util .X509CertUtil ;
80
+ import org .eclipse .leshan .core .security .certificate .verifier .X509CertificateVerifier ;
83
81
import org .slf4j .Logger ;
84
82
import org .slf4j .LoggerFactory ;
85
83
@@ -88,6 +86,7 @@ public class CoapsClientEndpointFactory extends CoapClientEndpointFactory {
88
86
private static final Logger LOG = LoggerFactory .getLogger (CoapsClientEndpointFactory .class );
89
87
90
88
protected final String loggingTagPrefix ;
89
+ protected final CertificateVerifierFactory certificateVerifierFactory = new CertificateVerifierFactory ();
91
90
92
91
public CoapsClientEndpointFactory () {
93
92
this ("LWM2M Client" );
@@ -184,59 +183,9 @@ protected DtlsConnectorConfig.Builder createEffectiveDtlsConnectorConfigBuilder(
184
183
singleCertificateProvider .setVerifyKeyPair (false );
185
184
effectiveBuilder .setCertificateIdentityProvider (singleCertificateProvider );
186
185
187
- // LWM2M v1.1.1 - 5.2.8.7. Certificate Usage Field
188
- //
189
- // 0: Certificate usage 0 ("CA constraint")
190
- // - trustStore is client's configured trust store
191
- // - must do PKIX validation with trustStore to build certPath
192
- // - must check that given certificate is part of certPath
193
- // - validate server name
194
- //
195
- // 1: Certificate usage 1 ("service certificate constraint")
196
- // - trustStore is client's configured trust store
197
- // - must do PKIX validation with trustStore
198
- // - target certificate must match what is provided certificate in server info
199
- // - validate server name
200
- //
201
- // 2: Certificate usage 2 ("trust anchor assertion")
202
- // - trustStore is only the provided certificate in server info
203
- // - must do PKIX validation with trustStore
204
- // - validate server name
205
- //
206
- // 3: Certificate usage 3 ("domain-issued certificate") (default mode if missing)
207
- // - no trustStore used in this mode
208
- // - target certificate must match what is provided certificate in server info
209
- // - validate server name
210
-
211
- CertificateUsage certificateUsage = serverInfo .certificateUsage != null ? serverInfo .certificateUsage
212
- : CertificateUsage .DOMAIN_ISSUER_CERTIFICATE ;
213
-
214
- if (certificateUsage == CertificateUsage .CA_CONSTRAINT ) {
215
- X509Certificate [] trustedCertificates = null ;
216
- if (trustStore != null ) {
217
- trustedCertificates = CertPathUtil .toX509CertificatesList (trustStore )
218
- .toArray (new X509Certificate [trustStore .size ()]);
219
- }
220
- effectiveBuilder .setAdvancedCertificateVerifier (new CaConstraintCertificateVerifier (
221
- serverInfo .serverCertificate , trustedCertificates , serverInfo .sni ));
222
- } else if (certificateUsage == CertificateUsage .SERVICE_CERTIFICATE_CONSTRAINT ) {
223
- X509Certificate [] trustedCertificates = null ;
224
-
225
- // - trustStore is client's configured trust store
226
- if (trustStore != null ) {
227
- trustedCertificates = CertPathUtil .toX509CertificatesList (trustStore )
228
- .toArray (new X509Certificate [trustStore .size ()]);
229
- }
230
-
231
- effectiveBuilder .setAdvancedCertificateVerifier (new ServiceCertificateConstraintCertificateVerifier (
232
- serverInfo .serverCertificate , trustedCertificates , serverInfo .sni ));
233
- } else if (certificateUsage == CertificateUsage .TRUST_ANCHOR_ASSERTION ) {
234
- effectiveBuilder .setAdvancedCertificateVerifier (new TrustAnchorAssertionCertificateVerifier (
235
- (X509Certificate ) serverInfo .serverCertificate , serverInfo .sni ));
236
- } else if (certificateUsage == CertificateUsage .DOMAIN_ISSUER_CERTIFICATE ) {
237
- effectiveBuilder .setAdvancedCertificateVerifier (
238
- new DomainIssuerCertificateVerifier (serverInfo .serverCertificate ));
239
- }
186
+ // set certificate verifier
187
+ X509CertificateVerifier certificateVerifier = certificateVerifierFactory .create (serverInfo , trustStore );
188
+ effectiveBuilder .setAdvancedCertificateVerifier (new LwM2mCertificateVerifier (certificateVerifier ));
240
189
241
190
// TODO We set CN with '*' as we are not able to know the CN for some certificate usage and so this is
242
191
// not used anymore to identify a server with x509.
0 commit comments