새소식

반응형
Java

[Java] java.security.egd option

  • -
반응형

서버에 설정을 살펴보던 중에 "java.security.egd" 옵션을 발견하게 되었고, 해당 설정이 어떠한 역할을 하는지 궁금하여 찾아본 내역을 정리해 보자. 

 

정의

jvm 설정 중에 하나로 

Java에 "SecureRandom" 클래스를 초기화 하는 방식에 영향을 미치는 옵션이다.

 

 

대부분의 설정값은 default값이 존재한다.

해당 default값을 사용하지 않고 따로 설정을 해주었다는 것은 

기존에 default값을 사용할 때 어떠한 문제가 발생해서 따로 설정을 해주었을 것이다.

 

default값을 사용하면 어떠한 문제가 발생하는지 찾아보자.

 

java 8 이전에 버전에서는 "/dev/random" 값이 default 값이었다고 한다. 

해당 값으로 설정이 되어있으면 Tomcat이 구동 되는데 blocking이 걸려 오래 걸리는 현상이 발생할 수도 있다고 한다.

그 이유로는 "SecureRandom" 클래스를 초기화시 난수를 생성할 충분한 임의성이 부여되어야 하는데 

그렇지 못한 경우에는 충분한 임의성에 도달할 때까지 blocking 된다고 한다.

org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] 
took [45,169] milliseconds.

 

이러한 문제로 "/dev/urandom" 값을 설정하여 

위의 상황에서 충분한 임의성에 도달하지 못해도 blocking되지 않고 초기화될 수 있도록 한다. 

 

하지만, java 8 버전 이후 부터는 java.security.egd의 default 값이 "/dev/urandom"이라고 한다. 

(https://www.baeldung.com/java-security-egd )

 

그렇기 때문에 이후 버전에 java에서는 java.security.egd 설정 없이도

Tomcat server 구동시 blocking 되는 이슈는 없을 것으로 판단된다. 

 

 

부연설명 : /dev/random

리눅스 서버는 난수를 생성하기 위해서 기본적으로 /dev/random 디바이스를 사용한다.

/dev/random은 랜덤 비트의 풀이며 Entropy pool 이라고 부른다.

난수를 생성할 때 Entropy pool에 default size만큼의 bit가 충분하지 않다면 /dev/random은 블로킹된다.

->자바에서 SecureRandom 클래스가 session ID를 생성할 때 /dev/random을 사용

 

참고 : https://lng1982.tistory.com/261

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.