26 lines
1.5 KiB
Markdown
26 lines
1.5 KiB
Markdown
# 호스트 JDK 부재 시 Java 암호 로직 교차검증 패턴
|
|
|
|
bibimbap 호스트엔 JDK 없음(빌드/실행은 Docker 경로). 그래서 생성한 password_hash 등이
|
|
**실제 Java 코드 경로로 검증되는지**를 추정으로 닫지 말고 컨테이너로 실행 증거를 만든다.
|
|
|
|
## 패턴
|
|
1. 검증 대상 로직을 단일 .java 로 복제(예: `UserController.verifyPassword` 그대로).
|
|
2. JRE-only 이미지(`bibimbap-app:latest`)는 `java File.java` 소스모드 불가
|
|
(`jdk.compiler` 모듈 없음 → `InternalError: Module jdk.compiler not in boot Layer`).
|
|
3. JDK 이미지로 컴파일+실행:
|
|
```
|
|
docker run --rm -v /tmp/HashVerify.java:/tmp/HashVerify.java:ro \
|
|
--entrypoint sh eclipse-temurin:21-jdk \
|
|
-c 'javac -d /out /tmp/HashVerify.java && java -cp /out HashVerify'
|
|
```
|
|
4. **positive + negative 둘 다** 확인(올바른 비번=true, 틀린 비번=false). 한쪽만 true 는 불충분.
|
|
|
|
## 왜
|
|
- self-report("스펙상 맞을 것") 대신 실행 증거로 AC 를 닫음.
|
|
- Python `hashlib.pbkdf2_hmac('sha256',...)` 와 Java `PBKDF2WithHmacSHA256` 는 byte-identical 이지만,
|
|
"동일하다"는 가정 자체를 실제 Java 경로 실행으로 검증.
|
|
- 호스트 `timeout` 명령은 macOS 기본 미존재(gtimeout). `/usr/bin/java` 는 JRE 없는 스텁일 수 있음.
|
|
|
|
일반화: 호스트에 런타임 없을 때 "추정으로 닫기" 대신 throwaway 컨테이너로 실행 증거 확보.
|
|
근거 세션: .atp/work-session/20260618-121419.
|