diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css index 3a1fb9487088d71bc7b90127ea994df24642e86e..7bff79416ece96706ec2e31248ccb2fa921fcbf9 100644 --- a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css +++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css @@ -7,7 +7,7 @@ cursor: pointer; } -.username, .role, .password, .password-confirmation, .certificate-subject, .certificate-issuer, .certificate-fingerprint { +.username, .role, .password, .password-confirmation, .certificate-subject, .certificate-issuer, .certificate-serial-number { width: 100%; } diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html index ec24fc45b2645ca3e6e6cd78c4d74910b747d901..cafe4764692f6f7a4b79ea22205dfbf0b4fcd77b 100644 --- a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html +++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html @@ -60,8 +60,8 @@ <mat-form-field class="certificate-issuer"> <input matInput placeholder="Issuer" [formControl]="userForm.controls['issuer']"> </mat-form-field> - <mat-form-field class="certificate-fingerprint"> - <input matInput placeholder="Fingerprints" [formControl]="userForm.controls['fingerprints']"> + <mat-form-field class="certificate-serial-number"> + <input matInput placeholder="Serial Number" [formControl]="userForm.controls['serialNumber']"> </mat-form-field> <label class="custom-file-upload"> diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts index 173f05fa4f0ee475d6c41088ad968303202a3f02..4a39a063b28f7e6e253add8a707441ab3abe32d9 100644 --- a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts +++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts @@ -33,8 +33,6 @@ export class UserDetailsDialogComponent { @ViewChild('fileInput') private fileInput; - - private passwordConfirmationValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => { const userToggle = control.get('userToggle'); const password = control.get('password'); @@ -54,9 +52,9 @@ export class UserDetailsDialogComponent { const validFrom = control.get('validFrom'); const validTo = control.get('validTo'); const issuer = control.get('issuer'); - const fingerprints = control.get('fingerprints'); - return certificateToggle && subject && validFrom && validTo && issuer && fingerprints - && certificateToggle.value && !(subject.value && validFrom.value && validTo.value && issuer.value && fingerprints.value) ? { certificateDetailsRequired: true} : null; + const serialNumber = control.get('serialNumber'); + return certificateToggle && subject && validFrom && validTo && issuer && serialNumber + && certificateToggle.value && !(subject.value && validFrom.value && validTo.value && issuer.value && serialNumber.value) ? { certificateDetailsRequired: true} : null; }; constructor(private dialogRef: MatDialogRef<UserDetailsDialogComponent>, @@ -79,7 +77,7 @@ export class UserDetailsDialogComponent { validFrom: data.row.validFrom, validTo: data.row.validTo, issuer: data.row.issuer, - fingerprints: data.row.fingerprints, + serialNumber: data.row.serialNumber, } }: { username: '', @@ -105,7 +103,7 @@ export class UserDetailsDialogComponent { 'validFrom': new FormControl({ value: user.certificate.validFrom, disabled: true }, Validators.required), 'validTo': new FormControl({ value: user.certificate.validTo, disabled: true }, Validators.required), 'issuer': new FormControl({ value: user.certificate.issuer, disabled: true }, Validators.required), - 'fingerprints': new FormControl({ value: user.certificate.fingerprints, disabled: true }, Validators.required), + 'serialNumber': new FormControl({ value: user.certificate.serialNumber, disabled: true }, Validators.required), }, { validator: [this.passwordConfirmationValidator, this.atLeastOneToggleCheckedValidator, this.certificateValidator] }); @@ -133,7 +131,7 @@ export class UserDetailsDialogComponent { 'validFrom': this.datePipe.transform(res.validFrom.toString(), this.dateFormat), 'validTo': this.datePipe.transform(res.validTo.toString(), this.dateFormat), 'issuer': res.issuer, - 'fingerprints': res.fingerprints + 'serialNumber': res.serialNumber }); }, err => { diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java index cd967b91f2179e9c571889259634e5c9086adb9b..6555e37084f3e0d8ab48bf2cd7bf915bf7867ef1 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java @@ -14,7 +14,6 @@ public class CertificateRO extends BaseRO { private String subject; private String issuer; private String serialNumber; - private String fingerprints; private LocalDateTime validFrom; private LocalDateTime validTo; @@ -57,14 +56,6 @@ public class CertificateRO extends BaseRO { this.serialNumber = serialNumber; } - public String getFingerprints() { - return fingerprints; - } - - public void setFingerprints(String fingerprints) { - this.fingerprints = fingerprints; - } - public LocalDateTime getValidFrom() { return validFrom; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java index a16c8d13162261bb419fa83e2c8bc3f1856c5a73..bceb3a0716e1c4aa685fc254517887e1faa1940f 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java @@ -126,14 +126,12 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> { String subject = cert.getSubjectDN().getName(); String issuer = cert.getIssuerDN().getName(); String hash = cert.getIssuerDN().getName(); - String fingerprints = extractFingerprints(cert); BigInteger serial = cert.getSerialNumber(); String certId = getCertificateIdFromCertificate(subject,issuer, serial ); CertificateRO cro = new CertificateRO(); cro.setCertificateId(certId); cro.setSubject(subject); cro.setIssuer(issuer); - cro.setFingerprints(fingerprints); // set serial as HEX cro.setSerialNumber(serial.toString(16)); cro.setValidFrom(LocalDateTime.ofInstant(cert.getNotBefore().toInstant(), ZoneId.systemDefault())); @@ -142,30 +140,6 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> { return cro; } - private String extractFingerprints(final X509Certificate certificate) { - if (certificate == null) - return null; - - MessageDigest md = null; - try { - md = MessageDigest.getInstance("SHA-1"); - } catch (NoSuchAlgorithmException e) { - LOG.warn("Error initializing MessageDigest ", e); - throw new SMPRuntimeException(ErrorCode.INVALID_CERTIFICATE_MESSAGE_DIGEST, e); - } - byte[] der = new byte[0]; - try { - der = certificate.getEncoded(); - } catch (CertificateEncodingException e) { - LOG.warn("Error encoding certificate ", e); - throw new SMPRuntimeException(ErrorCode.INVALID_CERTIFICATE_ENCODING, e); - } - md.update(der); - byte[] digest = md.digest(); - String digestHex = DatatypeConverter.printHexBinary(digest); - return digestHex.toLowerCase(); - } - public String getCertificateIdFromCertificate(String subject, String issuer, BigInteger serial ){ return new PreAuthenticatedCertificatePrincipal(subject, issuer, serial).getName(); }