You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.2 KiB
6.2 KiB
개발용 leaf 인증서 생성
0) 사전 설치
scoop install openssl
1) leaf 개인키 생성 (dfxagent-bsm-lab-postgres.json 대상)
cd pki
mkdir leaf-dfxagent-bsm-lab-postgres
cd leaf-dfxagent-bsm-lab-postgres
openssl genrsa -out dfxagent-bsm-lab-postgres.key 2048
2) CSR 생성 + SAN(도메인/IP) 넣기
2-1) CSR용 설정 파일 만들기: dfxagent-bsm-lab-postgres-req.cnf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext
[ dn ]
C = KR
O = BSM-LAB
OU = KDN DFX
CN = agent-bsm-lab-postgres
#CN에 해당하는 값은 settings.json의 myHostId 값 기재 (mTLS에 따른 클라이언트 검증의 확인 문자로 사용함)
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = agent-bsm-lab-postgres
IP.1 = 192.168.0.41
IP.2 = 172.22.1.4
IP.3 = 127.0.0.1
IP.4 = ::1
#도메인이 있는 경우에는 해당 도메인을 DNS.x에 기입
#도메인이 없는 경우에는 사용할 IP를 hosts 파일에 기술하고 해당 hostname을 DNS.x에 기입
2-2) CSR 생성
openssl req -new -key dfxagent-bsm-lab-postgres.key -out dfxagent-bsm-lab-postgres.csr -config dfxagent-bsm-lab-postgres-req.cnf
3) Intermediate로 leaf 인증서 서명(발급)
3-1) leaf 확장 파일 만들기: dfxagent-bsm-lab-postgres-leaf-ext.cnf
✅ 서버용(HTTPS), mTLS 클라이언트 겸용
[ v3_server ]
basicConstraints = critical, CA:false
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = agent-bsm-lab-postgres
IP.1 = 192.168.0.41
IP.2 = 172.22.1.4
IP.3 = 127.0.0.1
IP.4 = ::1
#도메인이 있는 경우에는 해당 도메인을 DNS.x에 기입
#도메인이 없는 경우에는 사용할 IP를 hosts 파일에 기술하고 해당 hostname을 DNS.x에 기입
3-2) Intermediate로 서명
openssl x509 -req -in dfxagent-bsm-lab-postgres.csr -CA ..\intermediate\intermediate-kdn.crt -CAkey ..\intermediate\intermediate-kdn.key -CAcreateserial -out dfxagent-bsm-lab-postgres.crt -days 825 -sha256 -extfile dfxagent-bsm-lab-postgres-leaf-ext.cnf -extensions v3_server
Certificate request self-signature ok
subject=C=KR, O=BSM-LAB, OU=KDN DFX, CN=agent-bsm-lab-postgres
Enter pass phrase for ..\intermediate\intermediate-kdn.key: 백세민1!
-days는 운영 정책에 맞춰 조정(예: 365, 730 등).
4) 체인 검증(중요)
openssl verify -CAfile ..\intermediate\ca-chain-kdn.crt dfxagent-bsm-lab-postgres.crt
OK가 나오는지 확인
5) (Java/톰캣용) PKCS12 keystore(p12) 만들기
DFXAgent가 Spring Boot(내장 톰캣)이므로 p12를 keystore로 사용
openssl pkcs12 -export -inkey dfxagent-bsm-lab-postgres.key -in dfxagent-bsm-lab-postgres.crt -certfile ..\intermediate\ca-chain-kdn.crt -out dfxagent-bsm-lab-postgres.p12 -name agent-bsm-lab-postgres
Enter Export Password: 백세민1!
TLS 적용시 실행환경에 옵션 추가 필요
1) java 옵션 설정
필수 옵션
-Djavax.net.ssl.trustStore="D:\projects\bsm-lab\dfx\dfxagent\src\docs\agent-bsm-lab-postgres\cert\truststore-merged.jks"
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.keyStore="D:\projects\bsm-lab\dfx\dfxagent\src\docs\agent-bsm-lab-postgres\cert\dfxagent-bsm-lab-postgres.p12"
-Djavax.net.ssl.keyStorePassword=qortpals1!
-Djavax.net.ssl.keyStoreType=PKCS12
메모리 설정, 디버그 등 선택 옵션
-Dfile.encoding=UTF-8 -Xms2048m -Xmx8192m -XshowSettings:properties
-Djavax.net.debug=ssl,handshake,trustmanager
주의할 점 : -jar 옵션 앞에 위치하여야 함
2) 실행 스크립트
2-1) linux 환경
#!/bin/sh
AGENT_HOME=/home/dfxagent/agent
JAVA_OPTS="-Xms2048m -Xmx8192m"
TLS_OPTS="-Djavax.net.ssl.trustStore=$AGENT_HOME/cert/truststore-merged.jks -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStore=$AGENT_HOME/cert/dfxagent-tuf-a15-defree-oracle.p12 -Djavax.net.ssl.keyStorePassword=qortpals1! -Djavax.net.ssl.keyStoreType=PKCS12"
TODAY=$(date "+%Y%m%d")
#java -jar $AGENT_HOME/lib/dfxagent.jar -Xms2048m -Xmx8192m --setting.file=$AGENT_HOME/conf/settings.json &
java -XX:TieredStopAtLevel=1 $JAVA_OPTS $TLS_OPTS -jar $AGENT_HOME/lib/dfxagent.jar -Xms2048m -Xmx8192m --setting.file=$AGENT_HOME/conf/settings.json &
#JDK: Red Hat OpenJDK 17.0.11+9 (LTS), OS: Rocky Linux 8.10 사용 중 하기의 오류 발생 -> -XX:TieredStopAtLevel=1 추가 (C1만 사용하여 C2 비활성화)
#크래시 시그널: SIGSEGV
#문제 프레임: PhaseOutput::BuildOopMaps() (HotSpot C2 JIT 내부)
#크래시 스레드: "C2 CompilerThread2" (JIT 컴파일러 스레드)
#크래시 직전 컴파일 중이던 메서드: C2: ... org.springframework.boot.loader.net.protocol.jar.Handler::openConnection (5 bytes)
2-2) windows 환경
@echo off
setlocal
REM Update this path for your Windows environment.
set "JAVA_HOME=C:\Program Files\Java\jdk-17"
set "AGENT_HOME=D:\projects\bsm-lab\dfx\dfxagent\src\docs\agent-bsm-lab-postgres"
set "JAVA_OPTS= -Dfile.encoding=UTF-8 -Xms2048m -Xmx8192m -XshowSettings:properties"
set "TLS_OPTS= -Djavax.net.debug=ssl,handshake,trustmanager -Djavax.net.ssl.trustStore="%AGENT_HOME%\cert\truststore-merged.jks" -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStore="%AGENT_HOME%\cert\dfxagent-bsm-lab-postgres.p12" -Djavax.net.ssl.keyStorePassword=qortpals1! -Djavax.net.ssl.keyStoreType=PKCS12"
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd"') do set "TODAY=%%i"
chcp 65001
REM 콘솔 출력이 필요한 경우 아래의 명령으로 실행
REM start "" cmd /c ""%JAVA_HOME%\bin\java.exe" %JAVA_OPTS% %TLS_OPTS% -jar "%AGENT_HOME%\..\..\..\build\libs\dfxagent-1.0.9.jar" --setting.file="%AGENT_HOME%\conf\dfxagent-bsm-lab-postgres.json" 1>>"dfxagent-bsm-lab-postgres-console-debug-%TODAY%.log" 2>&1"
REM 일반적으로 실행할 경우 아래의 명령으로 실행
start "" "%JAVA_HOME%\bin\java.exe" %JAVA_OPTS% %TLS_OPTS% -jar "%AGENT_HOME%\..\..\..\build\libs\dfxagent-1.0.9.jar" --setting.file="%AGENT_HOME%\conf\dfxagent-bsm-lab-postgres.json" 2>&1
endlocal