Class IssacUSR


  • public class IssacUSR
    extends java.lang.Object
    USR 모듈에서 쓰이는 각종 보안 응용 method들을 정의해 놓은 클래스.
    • Constructor Detail

      • IssacUSR

        public IssacUSR()
    • Method Detail

      • CheckDateMessage

        public static java.lang.String CheckDateMessage​(IssacCERTIFICATE cert)
                                                 throws IssacSDKException
        인증서의 유효기간이 100일 미만으로 남았는지를 확인한다.

        100일 미만으로 남았으면 인증서 상태에 대한 메세지를 출력하고 그렇지 않으면 null을 리턴한다.

        Parameters:
        cert - [IN] 유효기간을 확인할 인증서
        Returns:
        인증서 상태에 대한 메세지
        Throws:
        IssacSDKException - 오류 발생
      • DeletePKIInfo

        public static void DeletePKIInfo​(java.lang.String identifier,
                                         java.lang.String pin,
                                         IssacUSRSTORAGE storage)
                                  throws IssacSDKException
        저장소에서 identifier로 구분할 수 있는 개인키와 인증서를 삭제한다.
        Parameters:
        identifier - [IN] 동적 라이브러리를 제공한 인증기관에서 정의한 키와 인증서 쌍 구분자
        pin - [IN] 저장소에 따라 지우기를 수행하는 과정에서 필요한 바에 따라 사용할 수 있는 비밀정보
        storage - [IN] 동적 라이브러리에 대한 정보를 포함하고 있는 IssacUSRSTORAGE 객체
        Throws:
        IssacSDKException - 오류 발생
        See Also:
        IssacUSRSTORAGE(String)
      • CheckDate100

        public static int CheckDate100​(IssacCERTIFICATE cert)
                                throws IssacSDKException
        인증서의 유효기간이 100일 이상 남았는지 검사하여 메시지박스를 통해 알려준다.

        유효기간이 100일 이하로 남아있을 경우에 메시지박스에서 만기되었음을 알려준다.

        Parameters:
        cert - [IN] 유효기간을 검사하고자 하는 인증서
        Returns:
        현재시간을 기준으로 해서 남은 날
        Throws:
        IssacSDKException - 오류 발생
      • SimpleVerifyCertificate

        public static int SimpleVerifyCertificate​(IssacCERTIFICATE cert,
                                                  IssacCERTIFICATE rootCert,
                                                  IssacCERTIFICATE ownCert,
                                                  IssacPRIVATEKEY priKey,
                                                  java.lang.String configfile_path)
                                           throws IssacSDKException
        인증서의 유효성을 검증한다. (config 파일 필요)

        만들어진 config파일을 이 method에서 읽어서 필요한 설정들을 하고 이 설정들에 따라서 인증서 검증을 하게 된다.

        OCSP를 사용할 경우에는 OCSP 요청을 할 때 필요한 서명을 하기 위해 요청자의 인증서와 private key객체를 입력하여야 한다.

        함수 내부에서는 가능한 인증서 검증 경로를 만들어서 그 경로 하나하나에 대하여 FullPathCheck을 호출해 가면서 경로를 이루는 인증서들이 폐지되었는지를 OCSP 검증과 CRL 검증 등을 통하여 확인하게 된다.
        경로에 대한 모든 검증시도가 실패를 할 경우에 실패하게 된다.

        Parameters:
        cert - [IN] 검증하고자 하는 인증서
        rootCert - [IN] 검증하는 과정에서의 최상위 신뢰 인증서
        ownCert - [IN] OCSP 요청을 할 경우에 요청 서명자의 인증서. OCSP 요청을 하지 않을 경우에는 NULL을 입력하여도 된다. OCSP 요청을 하는지는 config file에 설정한다.
        priKey - [IN] OCSP 요청을 할 경우에 요청 서명자의 개인키. OCSP 요청을 하지 않을 경우에는 NULL을 입력하여도 된다. OCSP 요청을 하는지는 config file에 설정한다.
        configfile_path - [IN] config파일의 위치를 지정해주는 string
        Returns:
        0 = 인증서가 올바르게 verify가 됨.
        Throws:
        IssacSDKException - 오류 발생
      • SimpleVerifyCertificate_OnlyOcsp

        public static int SimpleVerifyCertificate_OnlyOcsp​(IssacCERTIFICATE cert,
                                                           IssacCERTIFICATE rootCert,
                                                           IssacCERTIFICATE ownCert,
                                                           IssacPRIVATEKEY priKey,
                                                           java.lang.String configfile_path)
                                                    throws IssacSDKException
        OCSP를 이용해 인증서를 검증한다. (config 파일 필요)

        만들어진 config파일을 이 method에서 읽어서 필요한 설정들을 하고 이 설정들에 따라서 인증서 검증을 하게 된다.

        OCSP 요청을 할 때 필요한 서명을 하기 위해 요청자의 인증서와 private key객체를 입력하여야 한다.
        경로에 대한 모든 검증시도가 실패를 할 경우에 실패하게 된다.

        Parameters:
        cert - [IN] 검증하고자 하는 인증서
        rootCert - [IN] 검증하는 과정에서의 최상위 신뢰 인증서
        ownCert - [IN] OCSP 요청을 할 경우에 요청 서명자의 인증서. OCSP 요청을 하지 않을 경우에는 NULL을 입력하여도 된다. OCSP 요청을 하는지는 config file에 설정한다.
        priKey - [IN] OCSP 요청을 할 경우에 요청 서명자의 개인키. OCSP 요청을 하지 않을 경우에는 NULL을 입력하여도 된다. OCSP 요청을 하는지는 config file에 설정한다.
        configfile_path - [IN] config파일의 위치를 지정해주는 string
        Returns:
        0 = 인증서가 올바르게 verify가 됨.
        Throws:
        IssacSDKException - 오류 발생
      • SimpleVerifyCertificateTime

        public static int SimpleVerifyCertificateTime​(IssacCERTIFICATE cert,
                                                      IssacCERTIFICATE rootCert,
                                                      IssacCERTIFICATE ownCert,
                                                      IssacPRIVATEKEY priKey,
                                                      java.util.Date checktime,
                                                      java.lang.String configfile_path)
                                               throws IssacSDKException
        SimpleVerifyCertificate 와 거의 같으나 인증서를 검증하는 시간이 인자로 들어 간다.
        Parameters:
        cert - [IN] 검증하고자 하는 인증서
        rootCert - [IN] 검증하는 과정에서의 최상위 신뢰 인증서
        ownCert - [IN] OCSP 요청을 할 경우에 요청 서명자의 인증서. OCSP 요청을 하지 않을 경우에는 NULL을 입력하여도 된다. OCSP 요청을 하는지는 config file에 설정한다.
        priKey - [IN] OCSP 요청을 할 경우에 요청 서명자의 개인키. OCSP 요청을 하지 않을 경우에는 NULL을 입력하여도 된다. OCSP 요청을 하는지는 config file에 설정한다.
        checktime - [IN] 검증하는 시간
        configfile_path - [IN] config파일의 위치를 지정해주는 string
        Returns:
        0 = 인증서가 올바르게 verify가 됨.
        Throws:
        IssacSDKException - 오류 발생
      • SimplePathValidateCertificate

        public static int SimplePathValidateCertificate​(IssacCERTIFICATE cert,
                                                        IssacCERTIFICATE rootCert,
                                                        java.lang.String configfile_path)
                                                 throws IssacSDKException
        이 함수는 SimpleVerifyCertificate 와 거의 같으나, 상태검증을 안한다.

        이 함수를 사용하려면 config 파일을 만들어야 한다.
        만들어진 config파일을 이 함수에서 읽어서 필요한 설정들을 하고 이 설정들에 따라서 인증서 경로 검증을 하게 된다.

        Parameters:
        cert - [IN] 검증하고자하는 인증서
        rootCert - [IN] 검증하는 과정에서의 최상위 신뢰 인증서
        configfile_path - [IN] config파일의 위치를 지정해주는 string
        Returns:
        0 = 인증서가 올바르게 verify가 됨.
        Throws:
        IssacSDKException - 오류 발생
      • GetCertificatesOnPath

        public static void GetCertificatesOnPath​(IssacCERTIFICATES certificatesOnPath,
                                                 IssacCERTIFICATE certificate,
                                                 IssacLDAPFINDERLIST ldaplist,
                                                 java.lang.String unused,
                                                 int flags)
                                          throws IssacSDKException
        이 함수는 자동적으로 인증서 경로상의 인증서들을 가져와서 certificates_on_path 객체에 집어넣는다.

        경로상에 있을 수 있는 인증서들은 ldap에서 불러온다.
        ldap을 뒤지는 방식은 ldaplist에 있는 각 LDAPFINDER객체에서 finding_base에 들어있는 string이 경로상의 인증서의 issuer dn에 있는지를 확인한 후에 만약 있다면 LDAPFINDER에 있는 정보를 이용하여 directory에 접속하여 인증서를 가져온다.

        Note: 이 함수는 ldap에 접속하지 못하더라도 오류를 내지 않는다.

        Parameters:
        certificatesOnPath - [OUT] 생성된 IssacCERTIFICATES 객체
        certificate - [IN] 인증경로를 찾으려는 인증서
        ldaplist - [IN] 접속할 directory들에 대한 설정 정보
        unused - [IN] 이 버전에서는 사용하지 않음. NULL을 입력해야함
        flags - [IN] 이 버전에서는 사용하지 않음. 0을 입력해야함.
        Throws:
        IssacSDKException - 오류 발생
      • CertificateVerify

        public static int CertificateVerify​(IssacPATHS paths,
                                            IssacCERTIFICATE cert,
                                            IssacCERTIFICATES caCerts,
                                            IssacCERTIFICATES trustedCerts,
                                            IssacCTL ctl,
                                            IssacPOLICYCONTEXT policies,
                                            java.util.Date now_time,
                                            int flags)
                                     throws IssacSDKException
        이 함수는 인증서를 검증해준다. 이 함수는 CTL을 사용하는 환경에서 쓰기에 적합하다.

        검증하고자하는 인증서와 CA 인증서 집합, 그리고 신뢰지점 인증서를 넣어주고 CTL을 넣어주면 이 함수는 CA 인증서 집합을 가지고 가능한 모든 인증경로를 구성한다.
        그리고 각 인증경로에 대해서 시점 verify_time에 대한 검증을 한다.

        검증 경로의 최상위 인증서가 신뢰지점 인증서가 아닐 경우에는 CTL을 확인하여 신뢰지점 인증서의 주체로부터 신뢰 확인이 된 인증서인지를 확인한다.
        인증된 경로들은 paths객체에 넣어진다.
        이 때 paths 내의 IssacCERTIFICATES객체에는 root ca certificate부터 시작해서 0번지 index에 집어넣어진다.
        그리고 경로의 순서대로 end-entity 인증서까지 들어가진다.
        모든 검증된 경로가 paths 객체에 들어가진다. 정책 검증을 하고 싶은 경우에는 정책을 입력하면 된다.
        그렇지 않을 경우에는 flags를 4로 설정하면 된다

        Parameters:
        paths - [OUT] 검증된 인증서 체인이 추가될 인증 경로 집합
        cert - [IN] 검증하고자 하는 인증서
        caCerts - [IN] 검증 경로상에 올 수 있는 인증서들의 집합
        trustedCerts - [IN] 신뢰 지점 인증서들
        ctl - [IN] 검증에 쓰일 ctl. ctl이 없을 경우에는 null을 사용하면 된다
        policies - [IN] 정책 검증을 하고 싶은 경우, 검증할 정책 집합
        now_time - [IN] 검증 시점
        flags - [IN] 인증서 검증 설정 플래그 (모든 검증을 수행한다. = 0, 기본적인 검증만 수행한다. = 4, 인증서 정책 검증을 하지 않음. = 4, basicConstraints를 무시함. = 20)
        Returns:
        0 = 검증 경로가 만들어짐. 인증서가 올바르게 인증됨.
        Throws:
        IssacSDKException - 오류 발생
        See Also:
        GetCertificatesOnPath(IssacCERTIFICATES, IssacCERTIFICATE, IssacLDAPFINDERLIST, String, int), FullPathCheck(IssacCERTIFICATES, IssacCERTIFICATES, IssacCERTIFICATES, IssacCERTIFICATE, IssacPRIVATEKEY, IssacVACONTEXT, IssacLDAPFINDERLIST, Date, int), IssacPATHS(), IssacPATHS.Delete()
      • FullPathCheck

        public int FullPathCheck​(IssacCERTIFICATES tgtCerts,
                                 IssacCERTIFICATES certificatesOnPath,
                                 IssacCERTIFICATES trustedCerts,
                                 IssacCERTIFICATE ownCert,
                                 IssacPRIVATEKEY prikey,
                                 IssacVACONTEXT vacontext,
                                 IssacLDAPFINDERLIST ldaplist,
                                 java.util.Date verify_time,
                                 int orderflags)
                          throws IssacSDKException
        인증서 집합으로 이루어진 인증서 패스 정보(tgtCerts)를 입력받아서 그 패스를 이루는 인증서들의 폐지 여부를 검사한다.

        패스를 이루는 인증서 중 하나라도 폐지되면 패스는 유효하지 않은 것이고 2를 리턴하고, nRevoked에는 몇 번째 인증서가 폐지되었는지를 기록한다.

        검증 방법은 OCSP검증과 CRL 검증을 지원한다.

        ordeflags의 사용 방법은 아래의 orderflags값들을 참조하여 예를 들어 OCSP검증 / 인증서 정보를 바탕으로 한 검증을 먼저 할 때는 0|0(| = bitwise or)를 넣어주면 되고 CRL검증만 하고 OCSP 서비스는 받고 싶지 않을 때 / 인증서 정보를 바탕으로 한 검증을 먼저 하는 경우 는 12|0 을 넣어주면 된다.

        Parameters:
        tgtCerts - [IN] 검증하고자 하는 인증서들의 집합. 하나의 path를 이룬다.
        certificatesOnPath - [IN] 검증경로상에 올 수 있는 인증서들의 집합. 인증서 경로 검증시 사용된다.
        trustedCerts - [IN] 신뢰 지점 인증서들(일반적으로 ROOT_CA의 인증서 하나만 입력)
        ownCert - [IN] 검증 요청자의 인증서. OCSP 요청 메시지 생성에 사용된다.
        prikey - [IN] 검증 요청자의 개인키
        vacontext - [IN] 검증받고자 하는 OCSP 서버의 정보
        ldaplist - [IN] Ldap정보
        verify_time - [IN] 상태 검증 하고자 하는 시점
        orderflags - [IN] 검증 순서에 대한 정보, OCSP/CRL 사이의 우선순위와 인증서정보/유저입력 정보 중의 우선 순위 결정(유저 입력 정보에 대해 먼저 검증한다.=1,인증서에 나타난 정보에 대해 먼저 검증한다.=0,OCSP서비스를 먼저 받고 CRL서버스를 받는다.=0,CRL서비스를 먼저 받고 OCSP서버스를 받는다.=4,인증서에 나타난 정보에 대해서만 검증한다=2,OCSP서비스만 받는다=8,CRL 서비스만 받는다.=12)
        Returns:
        인증서 상태 [1: GOOD, 2: REVOCATED, 3: UNKNOWN]
        Throws:
        IssacSDKException - 오류 발생
        See Also:
        CheckRevocation(IssacCERTIFICATE, IssacCERTIFICATE, IssacCERTIFICATES, IssacCERTIFICATES, IssacCERTIFICATE, IssacPRIVATEKEY, IssacVACONTEXT, IssacLDAPFINDERLIST, Date, int)
      • CheckRevocation

        public static int CheckRevocation​(IssacCERTIFICATE tgtCert,
                                          IssacCERTIFICATE tgtissuercert,
                                          IssacCERTIFICATES certificatesOnPath,
                                          IssacCERTIFICATES trustedCerts,
                                          IssacCERTIFICATE ownCert,
                                          IssacPRIVATEKEY prikey,
                                          IssacVACONTEXT vacontext,
                                          IssacLDAPFINDERLIST ldaplist,
                                          java.util.Date verify_time,
                                          int orderflags)
                                   throws IssacSDKException
        인증서의 상태를 검증한다. OCSP 검증과 CRL검증이 가능하다.

        OCSP검증은 인증서의 AIA(기관 정보 액세스)를 이용하는 서비스와 사용자가 임의로 입력한 OCSP서버 접속 정보인 IssacVACONTEXT 객체를 이용하는 서비스가 있다.
        CRL 검증은 인증서의 CDP(CRL 배포 지점)를 이용해서 LDAP에 접속하는 방법과 IssacLDAPFINDERLIST 객체를 이용하여 그 인증서의 CRL이 배포되어 있는 LDAP 정보를 찾아 서비스 받는 방법 두 가지를 지원한다.
        그리고 ordeflags의 사용 방법은 아래의 orderflags값들을 참조하여 예를 들어 OCSP검증 / 인증서 정보를 바탕으로 한 검증을 먼저 할 때는 0|0(| = bitwise or)를 넣어주면 되고 CRL검증만 하고 OCSP 서비스는 받고 싶지 않을 때 / 인증서 정보를 바탕으로 한 검증을 먼저 하는 경우 는 12|0 을 넣어주면 된다.

        Parameters:
        tgtCert - [IN] 검증하고자 하는 인증서
        tgtissuercert - [IN] 검증하고자 하는 인증서의 발급자의 인증서
        certificatesOnPath - [IN] 검증경로상에 올 수 있는 인증서들의 집합. 인증서 경로 검증시 사용된다.
        trustedCerts - [IN] 신뢰 지점 인증서들 (일반적으로 ROOT_CA의 인증서 하나만 입력)
        ownCert - [IN] 검증 요청자의 인증서
        prikey - [IN] 검증 요청자의 개인키
        vacontext - [IN] 검증받고자 하는 OCSP 서버의 정보
        ldaplist - [IN] LDAP 정보를 담는 IssacLDAPFINDERLIST 객체
        verify_time - [IN] 상태 검증 하고자 하는 시점
        orderflags - [IN] 검증 순서에 대한 정보, OCSP/CRL 사이의 우선순위와 인증서정보/유저입력 정보 중의 우선 순위 결정(유저 입력 정보에 대해 먼저 검증한다.=1,인증서에 나타난 정보에 대해 먼저 검증한다.=0,OCSP서비스를 먼저 받고 CRL서버스를 받는다.=0,CRL서비스를 먼저 받고 OCSP서버스를 받는다.=4,인증서에 나타난 정보에 대해서만 검증한다=2,OCSP서비스만 받는다=8,CRL 서비스만 받는다.=12)
        Returns:
        인증서 상태 [1: GOOD, 2: REVOCATED, 3: UNKNOWN]
        Throws:
        IssacSDKException - 인증서 상태 검증 실패 (returnedValue() 로 상세오류 확인)
        See Also:
        FullPathCheck(IssacCERTIFICATES, IssacCERTIFICATES, IssacCERTIFICATES, IssacCERTIFICATE, IssacPRIVATEKEY, IssacVACONTEXT, IssacLDAPFINDERLIST, Date, int)
      • SetCacheDir

        public static void SetCacheDir​(java.lang.String cacheDir)
                                throws IssacSDKException
        경로검증 시 다운로드 받은 파일을 저장해두는 경로를 지정한다. (default : 현재 디렉토리)
        Parameters:
        cacheDir - [IN] 캐시 디렉토리 경로. 경로의 마지막에 디렉토리 구분자를 입력하지 않도록 한다. (플랫폼에 따라 오류가 발생할 가능성이 있음)
        Throws:
        IssacSDKException - 오류 발생
      • AddTrustedCaCert

        public static void AddTrustedCaCert​(IssacCERTIFICATE cert)
                                     throws IssacSDKException
        신뢰하는 최상위 인증기관의 인증서를 추가한다.
        Parameters:
        cert - [IN] 신뢰하는 최상위 인증기관 인증서
        Throws:
        IssacSDKException - 오류 발생
      • MakeCertPath

        public static void MakeCertPath​(IssacCERTIFICATES caCerts,
                                        IssacCERTIFICATES trustedCaCerts,
                                        IssacCRL crl,
                                        IssacDLCONTEXT ldapInfo,
                                        IssacCERTIFICATE cert)
                                 throws IssacSDKException
        경로검증 시 다양한 옵션을 직접 적용할 수 있도록 경로구축만 실행하는 API.
        Parameters:
        caCerts - [OUT] 경로상의 CA 인증서 목록
        trustedCaCerts - [OUT] 신뢰하는 최상위 인증기관 목록
        crl - [OUT] 인증서 폐지 목록
        ldapInfo - [OUT] LDAP 정보
        cert - [IN] 경로를 구축할 Leaf 인증서
        Throws:
        IssacSDKException - 오류 발생
      • CertPathValidation

        public static int CertPathValidation​(IssacCERTIFICATE cert)
        옵션이 정해져 있는 일반 검증 (일반적인 사용을 위한 API)
        Parameters:
        cert - [IN] 경로 검증을 실행할 인증서 (Leaf 인증서)
        Returns:
        0 = 검증 경로가 만들어짐. 인증서가 올바르게 인증됨.
      • CTLCheckPath

        public static int CTLCheckPath​(java.lang.String ctlpath,
                                       IssacCERTIFICATE rootCert,
                                       IssacCERTIFICATES path)
                                throws IssacSDKException
        이 method는 디렉토리에 있는 CTL을 ctlpath에 쓰여진 위치 정보를 이용하여 디렉토리에서 가져와서, path의 최상위 인증서( 가장 먼저 들어간 인증서, 0번지에 있는 인증서 )가 ctl에 의해 인증이 되는지를 확인해주는 method이다.
        Parameters:
        ctlpath - [IN] CTL의 디렉토리상의 위치 및 attribute명.
        rootCert - [IN] ctl 발급자인 rootca의 인증서
        path - [IN] 인증하고자하는 검증경로
        Returns:
        0 = rootca_cert에 들어가있는 인증서로 ctl의 유효성을 검증한 후에 path에 들어가있는 0번지 인증서가 ctl에 의해 신뢰될 수 있는지를 확인하여 신뢰가능.
        1 = 디렉토리에서 가져온 CTL에 의해 신뢰될 수 없음.
        Throws:
        IssacSDKException - 오류 발생
      • GetTopCert

        public static void GetTopCert​(IssacCERTIFICATE rootCert,
                                      IssacCERTIFICATE userCert,
                                      java.lang.String configfile_path)
                               throws IssacSDKException
        디렉토리에서 인증서의 인증경로를 만들 수 있는 인증서들의 집합을 가져온 다음에 이들 중 self-signed된 인증서를 찾아 topCert에 출력을 하는 함수이다.

        이 함수는 루트인증서를 찾기 위한 함수가 아니며, 단순히 디렉토리를 통해 가져온 인증서들 중에 self-signed된 인증서를 찾아서 출력해주는 함수이다.

        configfile_path에는 config 파일의 위치를 지정해주면 SimpleVerifyCertificate()함수와 같은 동작원리로 config 파일을 읽어들여 필요한 LDAP정보를 찾아서 인증서 경로상의 인증서들을 찾게 된다.
        만약 LDAP 디렉토리가 compromise되거나, 혹은 man-in-the-middle 공격이 감행될 경우, 사용자는 엉뚱한 인증서를 얻을 수 있기 때문에 이 함수를 사용하여 얻어온 인증서를 신뢰지점으로 지정하는 것은 보안적으로 안전하지 못하다.

        Parameters:
        rootCert - [IN] 디렉토리에서 가져온 인증서들 중에 self-signed 인증서
        userCert - [IN] 상위 self-signed된 인증서를 구하고자 하는 base 인증서
        configfile_path - [IN] 접속할 directory에 대한 설정 정보가 들어가있는 config 파일의 위치
        Throws:
        IssacSDKException - 오류 발생