2017-05-05 1 views

답변

0

이 질문은 오래하지만, 그래서 여기에 질문에 대한 공격 첫 번째 구글의 이동 : 전화의

결과는 (오라클 자바) 특히, sun.security.provider.X509FactoryCertificateFactory 구현입니다. 이 팩토리는 정적 인 인스턴스 멤버만을 가지고 있습니다. 또한 synchronized static 메쏘드가 여러 개 있습니다.이 메쏘드는 스레드 안전성을 염두에두고 만들어 졌음을 나타냅니다.

그래서 실제로는 Java Java (tm)를 사용하고 있다는 것을 확신한다면 스레드 안전성을 가정 할 수 있습니다. 그러나 다른 JRE를 사용하고 있는지 확인해야합니다. 다음

private static final ThreadLocal<CertificateFactory> certFactory = 
    ThreadLocal.withInitial(() -> { 
    try { 
     return CertificateFactory.getInstance("x.509"); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
}); 

이후

public Certificate loadCertFrom(String filename) throws IOException, CertificateException { 
    try (final FileInputStream in = new FileInputStream(filename)) { 
     return certFactory.get().generateCertificate(in); 
    } 
} 
을 : 당신은 언제나 예를 들어, 안전 및 ThreadLocal의 값을 바꿈 수