2010-08-18 3 views
3

Tomcat 웹 응용 프로그램 개발 중이며 Tomcat을 다시 시작하여 코드 변경 사항을로드 할 수 있어야합니다./임의 ​​고양이/proc 디렉토리/SYS/커널을 실행하여 같이이 스톨은 (가능한 엔트로피에 의해 발생Tomcat SSL 초기화 속도 향상 방법

java.lang.Thread.State: RUNNABLE 
    at org.apache.tomcat.jni.SSL.initialize(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.catalina.core.AprLifecycleListener.initializeSSL(AprLifecycleListener.java:214) 
- locked <119e583> (a java.lang.Class) 
at org.apache.catalina.core.AprLifecycleListener.lifecycleEvent(AprLifecycleListener.java:83) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:770) 
at org.apache.catalina.startup.Catalina.load(Catalina.java:530) 
at org.apache.catalina.startup.Catalina.load(Catalina.java:550) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412) 

그러나, 때때로 Tomcat은 메인 쓰레드는 다음과 같은 장소에서 정체 될 때 시동하는 데 오랜 시간이 걸린다/entropy_avail)이 너무 낮습니다.

코드를 개발할 때 SSL 엔진이 올바른 임의 번호로 초기화되는지는 신경 쓰지 않습니다.

가짜 엔트로피를/dev/rnd에 덤프하거나 톰캣에 가짜 엔트로피를 사용하도록 할 방법이 있습니까?

"찾기 /"를 실행하여 엔트로피를 더 빠르게 올릴 수 있지만 엔트로피가 충분히 생성되는 데는 시간이 걸립니다.

답변

2

환경 변수 RANDFILE을 "/ dev/urandom"으로 설정하면 Tomcat이 SSL init에이 원본을 사용하게합니다.

+0

아, 그럼 OpenSSL - http://www.openssl.org/support/faq.cgi#USER1입니다. 나는 stackLace에서 JNI 호출을보고 싶지 않았는데,이 역시 4 월호 호출 수신기에 대한 참조를 포함하고 있었다. 하지만 java.security.egd를 설정하지 않은 이유가 설명됩니다. Tomcat은 JSSE가 아닌 OpenSSL을 사용하는 APR을 사용하고있었습니다. –

3

/dev/random보다 빠르기 때문에 (분명히 덜 안전함) /dev/urandom in a development environment을 사용할 수 있습니다.

주 - 이것은 Windows에서 작동하지 않으며 Windows에서는 문제가 아니므로/dev/random 사용시에만 나타납니다. Windows는/dev/random 문자열을 사용하여 필수 PRNG 소스 (즉, JRE_HOME/lib/security/java.security 파일의 securerandom.source 속성)를 명시 할 때 Microsoft Crypto API (CAPI)를 사용합니다. 비원시 (즉 JSSE) 구현 톰캣 SSL 사용될 때

RANDFILE 환경 변수를 설정할 필요 다른 답변에 따라

EDIT, 여기에 설명 된 해결책은 적용 가능하다.

+0

내 Tomcat 인스턴스가 Linux에서 실행 중입니다. -Djava.security.egd = file :/dev/./ urandom을 내 명령 행 args 목록에 추가하면 효과가없는 것 같습니다. 엔트로피 풀이 낮 으면 시작이 여전히 매우 느립니다. Java HotSpot (TM) Server VM (빌드 10.0-b23, 혼합 모드)을 사용하고 있습니다. 이 속성의 명령 줄 재정의가 Java에 의해 무시되는 이유가 있습니까? 특히, java.security 파일에는 securerandom.source = file :/dev/urandom 행이 있습니다. 명령 줄 옵션으로이를 무시할 수 있습니까? – mchr

+0

java.security에서 securerandom.source = file :/dev /./ urandom을 설정하는 것은 시작 시간에 영향을 미치지 않는 것 같습니다. 어쩌면 tomcat.jni.SSL.initialize가/dev/random을 사용하기 위해 하드 코딩 되었습니까? – mchr

+0

@mchr, 다음 명령을 실행하여 설치에서 urandom이 임의의 것보다 실제로 빠르다는 것을 확인할 수 있습니까? 1) cat/dev/random 2) cat/dev/urandom. 테스트 VMWare 인스턴스에서 random은 urandom보다 느려지므로 속도가 눈에 띄게 바뀔 수 있습니다. 그것은 당신을 위해 어느 정도 동일해야합니다. –