인증서
디지털 서명으로 내용 변경과 위장 행위를 검출하고, 부인을 방지할 수 있음
버전(Verion Number)
시리얼 번호(Serial Number)
서명 알고리즘(Signature Algorithm ID)
발행자(Issuer Name)
유효기간(Validaty period)
서브젝트 이름(Subject name)
서브젝트 공개키 정보(Subject Public Key Info)
CRL (certificate revocation list)
인증서 폐지 목록,
폐지된 인증서의 일련번호의 목록에 대해 인증기관이 디지털 서명을 붙인 것
DN (Distinguished Name)
인증서의 본인명(subject), 발행자명 (issuer)의 계층적 표현
로그인 form 요청
서버에서는 공개키와 개인키를 생성
(공개키는 클라이언트 단에 hidden처리해서 보이지 않게 하고(소스코드 보기로 확인할 수 있지만 암호화 되어 있다),
개인키는 사용자의 요청 정보가 담긴 request 객체에 포함된 session에 저장)
사용자가 로그인 폼에 아이디 비밀번호를 입력하고 로그인 버튼을 누름
공개키를 이용해 사용자가 입력한 데이터를 암호화 하여 서버로 전송
서버는 전달받은 암호화된 평문을 세션에 저장해둔 개인키를 사용하여 복호화
DB에 저장된 사용자 id와 pwd가 일치하는지 확인한다.
Client는 String값을 가지고 있고,
Server는 클래스 자체를 가지고 있음
인증기관의 인증서(root, RSA + X509 암호화),
KeyPair 가져오기(root, RSA는 기본, 개인키 암호화O, 공개키는 암호화X 상태로 가져옴)
UserKey 생성 (무작위 난수, RSA 암호화 방식만 적용) - Client
인증서 생성 (X509 암호화만 적용) - Server
UserKey (KeyPair)
공개키 + 개인키
시그니처 키
원장정보 + 개인키
인증서와 서명 데이터로 인증/검증
인증 시 원문 서명 데이터 생성 - Client
Base64 기반 String으로 변환된 인증서를 X.509 암호화를 통해 인증서 재생성 - Server
(생성이 되지 않을 경우 올바르지 않은 인증서, X509 암호화 데이터가 동일하지 않은 경우)
인증서 유효성 검사 - Server
(유효기간이 만료된 인증서인지)
인증서의 무작위 난수 공개키(RSA + X509 암호화)로 초기화 후 원장정보(Byte[]) 업데이트 - Server
서명(Byte[]) 데이터로 검증 - Server
X509Certificate cert = (X509Certificate)usrCert;
cert.checkValidity();
참고 사이트