문제

Java를 찾고 있어요 코드 서명 인증서를 사용하면 Java 애플릿이 그런 무서운 보안 경고를 표시하지 않습니다.그러나 제가 찾은 모든 곳에서는 (제 생각에는) 연간 200달러가 넘는 금액을 청구합니다.조사하는 동안 코드 서명 인증서는 인증서 서명과 거의 똑같아 보입니다. SSL 자격증.

내가 가진 주요 질문은 다음과 같습니다.SSL 인증서를 구입하여 Java 애플릿에 서명하는 데 사용할 수 있습니까?

도움이 되었습니까?

해결책

짧은 답변:아니요, 다릅니다.

긴 답변:동일한 종류의 인증서이고 동일한 암호화 소프트웨어를 사용하지만 인증서에는 사용이 허용되는 플래그가 있습니다.코드 서명과 웹 서버는 용도가 다릅니다.

다른 팁

Firefox 등에서 새 CA 인증서를 가져올 때 신뢰할 수 있는 인증서를 선택할 수 있는 옵션이 있습니다.

  • 서버에 서명
  • 서명 코드(예: 애플릿)
  • 이메일 인증서에 서명

그래서 나에게 대답은 다음과 같습니다.예, 똑같습니다.또한 다음을 사용하여 직접 생성해 보는 것은 어떨까요? OpenSSL (man openssl, man x509, man req 등유닉스에서)?경고를 조용히 하시겠습니까? 또는 당신은 원합니까? 다른 당신의 코드를 신뢰하기 위해 한 번도 만나본 적이 없는 사람이 있습니까?다른 사용자가 브라우저, OS 등과 함께 번들로 제공되는 앵커 CA에 신뢰를 연결하는 것이 필요하지 않은 경우 OpenSSL을 사용하여 자체 CA를 생성하십시오.

그리고 "OpenSSL을 사용하여 내 자신의 인증서를 생성하는 방법은 무엇입니까?" 후자가 당신의 선택이라면.

Thawte는 코드 서명 인증서를 제공합니다. 여기.다른 인증 기관에서도 이 서비스를 제공한다고 생각합니다.다음을 사용하여 자체 서명된 인증서를 만들 수도 있습니다. 자바 키 도구.

X.509 인증서에는 다음이 포함될 수 있습니다. 주요 사용 분야 (KU) 및 확장 키 사용 필드 (EKU).그만큼 RIA 서명을 생성하는 방법을 설명하는 Oracle 기술 노트 키 사용 플래그 없이 인증서를 생성합니다. 이는 잘 작동합니다(신뢰할 수 있는 CA에서 서명할 수 있는 경우).

그러나 점점 더 많은 CA가 이러한 키 사용 필드를 사용하여 인증서를 발행하고 있습니다.존재하는 경우 이러한 필드는 얽매다 인증서의 사용법.Java 플러그인은 EndEntityChecker:

/**
 * Check whether this certificate can be used for code signing.
 * @throws CertificateException if not.
 */
private void checkCodeSigning(X509Certificate cert)
        throws CertificateException {
    Set<String> exts = getCriticalExtensions(cert);

    if (checkKeyUsage(cert, KU_SIGNATURE) == false) {
        throw new ValidatorException
           ("KeyUsage does not allow digital signatures",
            ValidatorException.T_EE_EXTENSIONS, cert);
    }

    if (checkEKU(cert, exts, OID_EKU_CODE_SIGNING) == false) {
        throw new ValidatorException
            ("Extended key usage does not permit use for code signing",
            ValidatorException.T_EE_EXTENSIONS, cert);
    }

    if (!SimpleValidator.getNetscapeCertTypeBit(cert, NSCT_SSL_CLIENT)) {
        throw new ValidatorException
            ("Netscape cert type does not permit use for SSL client",
            ValidatorException.T_EE_EXTENSIONS, cert);
    }

    // do not check Netscape cert type for JCE code signing checks
    // (some certs were issued with incorrect extensions)
    if (variant.equals(Validator.VAR_JCE_SIGNING) == false) {
        if (!SimpleValidator.getNetscapeCertTypeBit(cert, NSCT_CODE_SIGNING)) {
            throw new ValidatorException
                ("Netscape cert type does not permit use for code signing",
                ValidatorException.T_EE_EXTENSIONS, cert);
        }
        exts.remove(SimpleValidator.OID_NETSCAPE_CERT_TYPE);
    }

    // remove extensions we checked
    exts.remove(SimpleValidator.OID_KEY_USAGE);
    exts.remove(SimpleValidator.OID_EXTENDED_KEY_USAGE);

    checkRemainingExtensions(exts);
}

확인 방법은 다음과 같습니다.

/**
 * Utility method checking if the extended key usage extension in
 * certificate cert allows use for expectedEKU.
 */
private boolean checkEKU(X509Certificate cert, Set<String> exts,
        String expectedEKU) throws CertificateException {
    List<String> eku = cert.getExtendedKeyUsage();
    if (eku == null) {
        return true;
    }
    return eku.contains(expectedEKU) || eku.contains(OID_EKU_ANY_USAGE);
}

따라서 KU 또는 EKU가 지정되지 않으면 KU 또는 EKU 검사기가 true를 반환합니다.

하지만

  • KU가 지정된 경우 전자 서명 고려대학교도 그 중 하나가 되어야 합니다.
  • EKU가 지정된 경우 EKU 코드 서명 (oid 1.3.6.1.5.5.7.3.3으로 식별됨) 또는 EKU 모든 사용법 (oid 2.5.29.37.0으로 식별됨)도 지정해야 합니다.

마지막으로, checkRemainingExtensions 메서드는 나머지 중요 EKU를 확인합니다.존재할 수 있는 유일한 다른 중요한 EKU는 다음과 같습니다.

  • 기본 제약 (oid "2.5.29.19") 및
  • 제목 대체 이름 (oid 2.5.29.17)

다른 중요한 EKU가 발견되면 false를 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top