diff --git a/src/main/java/org/creditto/authserver/certificate/controller/CertificateController.java b/src/main/java/org/creditto/authserver/certificate/controller/CertificateController.java index 27e99db..8f1bd2d 100644 --- a/src/main/java/org/creditto/authserver/certificate/controller/CertificateController.java +++ b/src/main/java/org/creditto/authserver/certificate/controller/CertificateController.java @@ -35,7 +35,6 @@ public ResponseEntity> issueCertificate( @Valid @RequestBody CertificateIssueRequest certificateIssueRequest, HttpServletRequest request ) { - log.info("인증서 발급 요청 - 전화번호: {}", certificateIssueRequest.phoneNo()); String ipAddress = request.getRemoteAddr(); String userAgent = request.getHeader(USER_AGENT); return ApiResponseUtil.success(SuccessCode.OK, certificateService.issueCertificate(certificateIssueRequest, ipAddress, userAgent)); diff --git a/src/main/java/org/creditto/authserver/certificate/dto/CertificateIssueResponse.java b/src/main/java/org/creditto/authserver/certificate/dto/CertificateIssueResponse.java index e64e020..53ca674 100644 --- a/src/main/java/org/creditto/authserver/certificate/dto/CertificateIssueResponse.java +++ b/src/main/java/org/creditto/authserver/certificate/dto/CertificateIssueResponse.java @@ -10,15 +10,13 @@ public record CertificateIssueResponse( String serialNumber, LocalDateTime issuedAt, - LocalDateTime expiresAt, - String publicKey + LocalDateTime expiresAt ) { public static CertificateIssueResponse from(Certificate certificate) { return CertificateIssueResponse.builder() .serialNumber(certificate.getSerialNumber()) .issuedAt(certificate.getIssuedAt()) .expiresAt(certificate.getExpiresAt()) - .publicKey(certificate.getPublicKey()) .build(); } } \ No newline at end of file diff --git a/src/main/java/org/creditto/authserver/certificate/repository/CertificateRepository.java b/src/main/java/org/creditto/authserver/certificate/repository/CertificateRepository.java index a539c4c..cd61923 100644 --- a/src/main/java/org/creditto/authserver/certificate/repository/CertificateRepository.java +++ b/src/main/java/org/creditto/authserver/certificate/repository/CertificateRepository.java @@ -8,8 +8,6 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.time.LocalDateTime; -import java.util.List; import java.util.Optional; @Repository @@ -18,11 +16,7 @@ public interface CertificateRepository extends JpaRepository @Query("SELECT ctf FROM Certificate ctf JOIN FETCH ctf.user WHERE ctf.serialNumber = :serial") Optional findBySerialNumber(@Param("serial") String serialNumber); - List findByUser(User user); - Optional findByUserAndStatus(User user, CertificateStatus status); - long countByUserAndStatus(User user, CertificateStatus status); - boolean existsCertificateByStatusAndUser(CertificateStatus status, User user); } diff --git a/src/main/java/org/creditto/authserver/certificate/repository/CertificateUsageHistoryRepository.java b/src/main/java/org/creditto/authserver/certificate/repository/CertificateUsageHistoryRepository.java index 4436ac1..6e15b57 100644 --- a/src/main/java/org/creditto/authserver/certificate/repository/CertificateUsageHistoryRepository.java +++ b/src/main/java/org/creditto/authserver/certificate/repository/CertificateUsageHistoryRepository.java @@ -1,24 +1,9 @@ package org.creditto.authserver.certificate.repository; -import org.creditto.authserver.certificate.entity.Certificate; import org.creditto.authserver.certificate.entity.CertificateUsageHistory; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.time.LocalDateTime; -import java.util.List; - @Repository public interface CertificateUsageHistoryRepository extends JpaRepository { - - List findByCertificateIdOrderByCreatedAtDesc(Long certificateId); - - List findByCertificateIdAndSuccessFalseAndCreatedAtAfter( - Long certificateId, - LocalDateTime after - ); - - List findByCertificate_User_IdOrderByCreatedAtDesc(Long userId); - - List findByCertificate(Certificate certificate); } \ No newline at end of file diff --git a/src/main/java/org/creditto/authserver/certificate/service/CertificateService.java b/src/main/java/org/creditto/authserver/certificate/service/CertificateService.java index 509c4bc..fc80066 100644 --- a/src/main/java/org/creditto/authserver/certificate/service/CertificateService.java +++ b/src/main/java/org/creditto/authserver/certificate/service/CertificateService.java @@ -28,7 +28,6 @@ import java.security.PrivateKey; import java.security.PublicKey; import java.time.LocalDateTime; -import java.util.List; import java.util.Map; import java.util.UUID; @@ -158,125 +157,6 @@ public Map getSerialNumberByUser(CertificateSerialRequest certif return Map.of(CERTIFICATE_SERIAL, certificate.getSerialNumber()); } - - public List getCertificateHistory(String serialNumber, String simplePassword) { - Certificate certificate = getCertificateBySerialNumber(serialNumber); - try { - if (verifyCertificateKeyPair(simplePassword, certificate)) { - recordUsageHistory(certificate, HistoryAction.READ, true, null, "", ""); - return certificateUsageHistoryRepository.findByCertificate(certificate); - } else { - recordUsageHistory(certificate, HistoryAction.READ, false, null, "", ""); - throw new InvalidSimplePasswordException(CERTIFICATE_AUTH_FAILED); - } - } catch (GeneralSecurityException e) { - throw new InvalidSimplePasswordException(CERTIFICATE_AUTH_FAILED); - } - } - - /** - * 사용자 인증서 목록 조회 - */ - public List getUserCertificates(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new EntityNotFoundException(USER_NOT_FOUND)); - - return certificateRepository.findByUser(user); - } - - /** - * 활성 인증서 목록 조회 - */ - public Certificate getActiveCertificates(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new EntityNotFoundException(USER_NOT_FOUND)); - - return certificateRepository.findByUserAndStatus(user, CertificateStatus.ACTIVE) - .orElseThrow(() -> new CertificateNotFoundException(CERTIFICATE_NOT_FOUND)); - } - - /** - * 인증서 폐기 - */ - @Transactional - public void revokeCertificate(String serialNumber, String simplePassword, String reason) { - Certificate certificate = getCertificateBySerialNumber(serialNumber); - try { - if (verifyCertificateKeyPair(simplePassword, certificate)) { - certificate.revoke(reason); - certificateRepository.save(certificate); - log.info("인증서 폐기 완료 - 일련번호: {}, 사유: {}", serialNumber, reason); - } else { - throw new InvalidSimplePasswordException(CERTIFICATE_AUTH_FAILED); - } - } catch (GeneralSecurityException e) { - throw new InvalidSimplePasswordException(CERTIFICATE_AUTH_FAILED); - } - } - - /** - * 인증서 상세 조회 - */ - public Certificate getCertificate(String serialNumber, String simplePassword) { - Certificate certificate = getCertificateBySerialNumber(serialNumber); - try { - if (verifyCertificateKeyPair(simplePassword, certificate)) { - return certificate; - } else { - throw new InvalidSimplePasswordException(CERTIFICATE_AUTH_FAILED); - } - } catch (GeneralSecurityException e) { - throw new InvalidSimplePasswordException(CERTIFICATE_AUTH_FAILED); - } - } - - /** - * 활성 인증서 개수 조회 - */ - public long countActiveCertificates(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new EntityNotFoundException(USER_NOT_FOUND)); - - return certificateRepository.countByUserAndStatus(user, CertificateStatus.ACTIVE); - } - - /** - * 인증서 갱신 - */ - @Transactional - public CertificateIssueResponse renewCertificate(String oldSerialNumber, String simplePassword) { - // 기존 인증서 조회 및 검증 - Certificate oldCertificate = getCertificateBySerialNumber(oldSerialNumber); - - User user = oldCertificate.getUser(); - - // 새 RSA 키 쌍 생성 - KeyPair keyPair = encryptionUtil.generateRSAKeyPair(); - - // 새 인증서별 SALT 생성 - String certificateSalt = AESUtil.generateSalt(); - - // 개인키를 간편비밀번호로 암호화 - String encryptedPrivateKey = encryptionUtil.encryptPrivateKey( - keyPair.getPrivate(), - simplePassword, - certificateSalt - ); - - Certificate newCertificate = createCertificate(keyPair, user, encryptedPrivateKey, certificateSalt); - - certificateRepository.save(newCertificate); - - // 기존 인증서 폐기 - oldCertificate.revoke("인증서 갱신"); - certificateRepository.save(oldCertificate); - - log.info("인증서 갱신 완료 - 사용자: {}, 기존: {}, 신규: {}", - user.getName(), oldSerialNumber, newCertificate.getSerialNumber()); - - return CertificateIssueResponse.from(newCertificate); - } - private Certificate createCertificate(KeyPair keyPair, User user, String encryptedPrivateKey, String certificateSalt) { String publicKey = encryptionUtil.encodePublicKey(keyPair.getPublic());