자바 에서 디지털 인증서 생 성 및 유지보수
11749 단어 자바
모든 인증서 라 이브 러 리 는 파일 로 구성 되 어 있 습 니 다. 접근 암호 가 있 습 니 다. 처음 만 들 때 인증 라 이브 러 리 를 자동 으로 생 성하 고 인증서 라 이브 러 리 에 접근 할 암 호 를 지정 하 라 고 요구 합 니 다.
인증 서 를 만 들 때 인증서 의 정보 와 인증서 에 해당 하 는 비밀 키 암 호 를 입력 해 야 합 니 다.이러한 정 보 는 CN = xx, OU = xx, O = xx, L = xx, ST = xx, C = xx 를 포함한다.
CN (Common Name 이름과 성씨)
OU (조직 단위 명칭)
O (조직 명)
L (Locality 도시 또는 지역 이름)
ST (State 주 또는 성 이름)
C (국가 명)
대화 식 으로 도구 가 상기 정 보 를 입력 하 는 것 을 알려 줄 수도 있 고 매개 변 수 를 사용 할 수도 있다.
- dname "CN = xx, OU = xx, O = xx, L = xx, ST = xx, C = xx" 를 자동 으로 생 성 합 니 다.
1. 예시
다음 과 같은 문장 은 인 터 랙 션 으로 인증 서 를 만 듭 니 다. 인증서 라 이브 러 리 를 abnerCALib 로 지정 하고 abnerCA 라 는 인증 서 를 만 듭 니 다. RSA 알고리즘 으로 생 성 할 것 을 지정 합 니 다.
키 길 이 를 1024 로 지정 하고 인증서 유효기간 은 3650 일 입 니 다.
C:\j2sdk1.4.1_01\mykeystore>keytool -genkey -alias abnerCA -keyalg RSA -keysize 1024 -keystore abnerCALib -validity 3650
우리 가 입력 한 것 은 CN 으로 중국 을 대표 하 는 줄 임 말 이 며 '중국' 이라는 두 글 자 를 직접 입력 할 수도 있다.
2. 인증서 의 조작 방법
● 인증서 표시
예:
keytool –list –keystore abnerCALib
abnerCALib 인증서 라 이브 러 리 의 모든 인증서 목록 을 표시 합 니 다: 다음 그림:
keytool - list - alias abnerCA - keystore abnerCALib
abnerCALib 인증서 라 이브 러 리 에 있 는 abnerCA 라 는 인증서 의 정 보 를 표시 합 니 다. 아래 그림 과 같 습 니 다.
keytool - list - v - alias abnerCA - keystore abnerCALib
다음 그림 과 같이 인증서 에 대한 자세 한 정보 (- v 인자) 를 표시 합 니 다.
● 인증서 파일 로 내 보 내기
예 를 들 어: keytool - export - alias abnerCA - file abnerCA. cer - keystore abnerCALib
인증서 라 이브 러 리 abnerCALib 의 별명 인 abnerCA 인증 서 를 abnerCA. cer 인증서 파일 로 내 보 냅 니 다.
이것 은 인증서 주체 의 정보 와 인증서 의 공개 키 를 포함 하고 비밀 키 를 포함 하지 않 으 며 다음 그림 과 같이 공개 할 수 있 습 니 다.
위 에서 내 보 낸 인증서 파일 은 바 이 너 리 인 코딩 파일 로 텍스트 편집기 로 정확하게 표시 할 수 없 기 때문에 인증 서 를 발표 하지 않 고 - rfc 인 자 를 추가 하여 인쇄 가능 한 컴 파 일 러 인 코딩 으로 출력 할 수 있 습 니 다.
예:
keytool -export -alias abnerCA -file abnerCA.cer -keystore abnerCALib -storepass 100200 –rfc
이 명령 은 명령 줄 에 인증서 라 이브 러 리 의 접근 암 호 를 지정 하고 인 코딩 을 볼 수 있 는 방식 으로 출력 할 것 을 지정 합 니 다.
3. 인증서 파일 을 통 해 인증서 의 정 보 를 봅 니 다.
명령: keytool – printcert – file abnerCA. cer 를 통 해 인증서 파일 의 정 보 를 볼 수 있 습 니 다.
윈도 우즈 에서 인증서 파일 을 두 번 눌 러 서 직접 볼 수도 있 습 니 다.
● 인증서 항목 삭제
keytool 의 명령 행 인자 - delete 는 키 라 이브 러 리 의 항목 을 삭제 할 수 있 습 니 다. 예 를 들 어:
keytool -delete -alias abnerCA -keystore abnerCALib
이 명령 은 abnerCALib 라 이브 러 리 에 있 는 abnerCA 인증 서 를 삭제 합 니 다.
● 인증서 항목 구령 의 수정
예:
keytool –keypasswd –alias abnerCA –keystore abnerCALib
abnerCALib 인증서 라 이브 러 리 의 항목 을 abnerCA 인증서 로 대화 식 으로 수정 할 수 있 습 니 다.
Keytool –keypasswd –alias abnerCA –keypass 123456 –new 200100 –storepass 1002 00 –keystore abnerCALib
이 줄 명령 은 라 이브 러 리 에 있 는 abnerCA 라 는 인증서 의 비밀 번 호 를 새 비밀번호 123456 으로 변경 합 니 다. 줄 에 있 는 200100 은 이 인증서 의 원래 비밀 번 호 를 말 합 니 다. 100200 은 라 이브 러 리 의 비밀 번 호 를 말 합 니 다.
디지털 인증서 발급 (서명)
우 리 는 위 에 디지털 인증 서 를 만 들 었 지만, 이 디지털 인증 서 는 권위 있 는 CA 의 확인 (즉 서명) 을 거치 지 않 았 습 니 다. 일반적으로, 우 리 는 이 인증 서 를 권위 있 는 CA 에 보 내 고, 디지털 인증 서 를 고객 에 게 신뢰 할 수 있 도록 서명 을 신청 해 야 합 니 다.
다음은 권위 있 는 디지털 인증서 인증 기관 인 CA 를 모방 할 것 입 니 다. 이 기 구 는 자신의 비밀 키 를 사용 하여 다른 인증 서 를 발급 할 것 입 니 다. 이 발급 과정 은 다음 과 같 습 니 다. 저 희 는 CA 입 니 다. 저 희 는 스스로 서명 한 디지털 인증 서 를 디지털 인증서 라 이브 러 리 에 저장 합 니 다. 디지털 인증서 라 이브 러 리 에 있 는 이 CA 디지털 인증 서 는 비밀 키, 공개 키, 공개 키 를 포함 하고 있 습 니 다.이 CA 의 주체 정보 입 니 다. 다음 명령 은 CA 가 서명 한 디지털 인증 서 를 만 들 수 있 습 니 다.
keytool – genkey – dname "CN = 메 이 슨 시스템 소프트웨어 유한 공사, OU = 메 이 슨 시스템 소프트웨어 유한 공사, O = 메 이 슨 시스템 소프트웨어 유한 공사, L = 청 두 시, ST = 사천성, C = 중국" – alias MissionCA – keyalt RSA – keysize 1024 – keystore abnerCALib – keypass 200100 – storepass 100200 – validity 3650
위 에서 저 희 는 abnerCALib 라 는 디지털 인증서 라 이브 러 리 에 missionca 라 는 별명 을 만 들 었 습 니 다. 유효기간 은 3650 일 이 고 알고리즘 은 RSA 이 며 키 길 이 는 1024 인 디지털 인증서 입 니 다. 이 인증서 의 비밀 키 비밀 번 호 는 200100 이 고 인증서 라 이브 러 리 의 방문 비밀 번 호 는 100200 입 니 다. 이 별명 은 missionca 라 는 인증 서 는 우리 자신의 권위 적 인 CA 를 대표 합 니 다. 즉, 메 이 슨 시스템 소프트웨어 유한 공사 입 니 다.이 권위 있 는 CA 입 니 다. 앞으로 이 인증서 로 다른 디지털 인증서 에 서명 하 겠 습 니 다.
지금 나 는 자신 에 게 디지털 인증 서 를 신청 하려 고 한다. 나 는 이렇게 할 수 있다. 먼저 디지털 인증서 라 이브 러 리 에 인증 서 를 만 들 수 있다.
keytool – genkey – dname "CN = 차이 징, OU = 메 이 슨 시스템 소프트웨어 유한 공사, O = 메 이 슨 시스템 소프트웨어 유한 공사, L = 청 두 시, ST = 사천성, C = 중국" – alias abnerCA – keyalt RSA – keysize 1024 – keystore abnerCALib – keypass 200100 – storepass 100200 – validity 3650
이렇게 abnerCA 라 는 별명 을 가 진 디지털 인증 서 를 만 들 었 습 니 다. cer 파일 로 내 보 낼 수 있 습 니 다. (이전 참조)
이 어, 우 리 는 이전 단계 에 생 성 된 CA 의 자체 서명 인증서 로 이 디지털 인증 서 를 서명 할 수 있 습 니 다.
CA 가 디지털 인증 서 를 서명 하 는 과정 은 다음 과 같은 프로그램 으로 진행 되 어야 합 니 다. 이 프로그램 은 스스로 설명 합 니 다.
package com.security; import java.io.*; import java.security.*; import java.security.cert.*; import java.util.*; import java.math.*; import sun.security.x509.*; /** * <p>Description: (CA) ( CA ) * , CA </p> * @author abnerchai * @version 1.0 */ public class SignCert { public static void main(String[] args) throws Exception{ char[] storepass = "100200".toCharArray(); // CA char[] cakeypass = "200100".toCharArray();//CA String alias = "missionCA"; //CA , CA String name = "abnerCALib";// CA String newLib = "SignedLib"; // , , char[] newLibPass = "100200".toCharArray();// String cerFileName = "abnerCA.cer";// String aliasName = "abnerCA";// alias char[] namePass = "200100".toCharArray(); // int n =3; // , , int sn = 200406001; // , 2004 6 , CA 001 , String afteraliasName = "abnerCA_Signed"; // char[] afterNewPass = "200100".toCharArray(); // // FileInputStream in = new FileInputStream(name); KeyStore ks = KeyStore.getInstance("JKS");//JKS ks.load(in,storepass); // (CA) java.security.cert.Certificate cl = ks.getCertificate(alias); // CA , l l 1 PrivateKey privateKey = (PrivateKey)ks.getKey(alias,cakeypass); // CA in.close(); // (CA) byte[] encodl = cl.getEncoded();// , l 1 X509CertImpl cimpl = new X509CertImpl(encodl); // l 1, X509CertImpl // X509CertInfo , 。 X509CertInfo cinfo_first = (X509CertInfo)cimpl.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); // X500Name X500Name issuer = (X500Name) cinfo_first.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); // , // , , //////////////////////////////////////////////////////////////////////// // 、 cer start /////////////////////////////////////////////////////////////////////////////// /* CertificateFactory cf = CertificateFactory.getInstance("X.509"); //X.509 FileInputStream in2 = new FileInputStream(cerFileName);// java.security.cert.Certificate c2 = cf.generateCertificate(in2); // in2.close(); byte[] encod2 = c2.getEncoded(); X509CertImpl cimp2 = new X509CertImpl(encod2); // , X509CertInfo cinfo_second = (X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); */ /////////////////////////////////////////////////////////////////////////////// //end /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // 、 start /////////////////////////////////////////////////////////////////////////////// java.security.cert.Certificate c3 = ks.getCertificate(aliasName); // , byte[] encod3 = c3.getEncoded(); X509CertImpl cimp3 = new X509CertImpl(encod3); X509CertInfo cinfo_second = (X509CertInfo)cimp3.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); /////////////////////////////////////////////////////////////////////////// //end /////////////////////////////////////////////////////////////////////////// // , n , // CA Date beginDate = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(beginDate); cal.add(cal.YEAR,n); Date endDate = cal.getTime(); CertificateValidity cv = new CertificateValidity(beginDate,endDate); cinfo_second.set(X509CertInfo.VALIDITY,cv); // CertificateSerialNumber csn = new CertificateSerialNumber(sn); cinfo_second.set(X509CertInfo.SERIAL_NUMBER,csn); // cinfo_second.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer); // CA // , CA md5WithRSA AlgorithmId algorithm = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid); cinfo_second.set(CertificateAlgorithmId.NAME+"."+ CertificateAlgorithmId.ALGORITHM,algorithm); // X509CertImpl newcert = new X509CertImpl(cinfo_second); // , CA , MD5WithRSA newcert.sign(privateKey,"MD5WithRSA");// CA // // , , // , , // 。 , , // , 。 。 /////////////////////////////////////////////////////////////////////////// // : /////////////////////////////////////////////////////////////////////////// /* ks.setCertificateEntry(afteraliasName,newcert); FileOutputStream out = new FileOutputStream(newLib); // signedLib, ks.store(out,newLibPass); out.close(); */ /////////////////////////////////////////////////////////////////////////// //end /////////////////////////////////////////////////////////////////////////// // , // , , // /////////////////////////////////////////////////////////////////////////// // , /////////////////////////////////////////////////////////////////////////// // PrivateKey prk = (PrivateKey)ks.getKey(aliasName,namePass); java.security.cert.Certificate[] cchain = {newcert}; // , , , ks.setKeyEntry(afteraliasName,prk,afterNewPass,cchain); // FileOutputStream out2 = new FileOutputStream(name); ks.store(out2,storepass);// , /////////////////////////////////////////////////////////////////////////// //end /////////////////////////////////////////////////////////////////////////// } }
이 프로그램 을 실행 하면 MissionCA 인증 서 를 사용 하여 abnerCA 인증 서 를 발급 할 수 있 습 니 다. 실행 후 abnerCALib 에 abnerCA Signed 라 는 별명 을 가 진 디지털 인증 서 를 추가 하면 cer 파일 로 내 보 냅 니 다 (내 보 내기 방법 은 이전 참조).
이로써 우 리 는 CA 인증 서 를 사용 하여 디지털 인증서 로 서 명 했 습 니 다. windows 에서 내 보 낸 abnerCA Signend. cer 파일 을 두 번 누 르 면 다음 그림 과 같 습 니 다.
위의 그림 에서 인증서 정보 란 에 "이 인증 서 를 검증 할 수 없습니다" 라 고 표 시 된 이 유 는 이 디지털 인증서 의 발급 자 missionca 인증서 가 시스템 에 설치 되 어 있 지 않 기 때 문 입 니 다. 인증서 라 이브 러 리 에 있 는 missionca 라 는 이름 의 자체 서명 디지털 인증 서 를 cer 파일 로 내 보 낸 다음 시스템 에 설치 할 수 있 습 니 다. 이 인증 서 를 두 번 클릭 하면 다음 그림 과 같 습 니 다.
이 곳 에서, 우 리 는 자신의 CA 서명 으로 발급 되 는 개인 디지털 인증 서 를 받 았 습 니 다. 그리고 우리 자신의 CA 인증 서 를 시스템 에 설치 하여 시스템 이 신뢰 하 는 루트 인증서 가 되 었 습 니 다. 따라서 앞으로 우리 의 이 CA 인증서 서명 으로 발급 되 는 디지털 인증 서 는 시스템 의 신뢰 를 받 을 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.