secureQR-module 라이브러리를 적용한 보안 QR api 서버 적용 예시
- 앞서 개발한
secureQR-module라이브러리를 적용한 REST API 서버로의 적용 예시 - 암호화 QR의
암호화 방식 추가,암호화 QR 생성,암호화 QR 인증 및 결과 반환의 역할을 수행하는 예시를 작성함.
- 이외에도 자바를 사용하는 서버라면 라이브러리를 추가함으로써 적용이 가능
- 로컬 환경에서는 클라이언트와 통신하기 힘듬을 주의
- 자바11 이 설치 되어 있어야 함
- 동봉한 jar 파일을 다운로드 받음
- cmd 나 터미널을 실행
- 해당 jar파일 디렉토리로 이동
- 다음과 명령어를 입력하여 배포 파일 실행
java -jar secureQR-0.0.1-SNAPSHOT.jar
- 프로젝트를 다운받고 IntelliJ 프로젝트로 로드
- InteliJ의 Gradle탭에서 Build 함.
secureQR/src/main/java/com/secureQR/SecureQrApplication.java를 실행하여 로컬 환경에서 테스트 가능
- 리눅스 기반 서버 환경에서 해당 레파지토리의 파일을 실행한다고 가정
- 현재 아마존 웹 호스팅 AWS에서 AMI2 가상 머신을 활용
- 자바와 GIT 설치
sudo yum install java-11-openjdk-devel
sudo yum install git
- 해당 서버의 시간대를 서비스 환경에 맞게 설정
sudo rm /etc/localtime
sudo ln –s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
- 해당 레파지토리를 다운받을 디렉토리 생성
mkdir ~/app && mkdir ~/app/QrServer
- 해당 디렉토리로 이동
cd ~/app/QrServer
git clone명령어를 통해 해당 레파지토리 주소를 이용하여 다운 받음
git clone https://github.com/SoTree17/secureQR-server-example.git
gradlebootjar 도구를 통해 jar파일로 생성
./gradlew bootjar
- ./gradlew 권한 오류시 아래 명령어 입력
chmod +x ./gradlew
- 빌드된 실행파일 경로로 이동 후, 실행
cd build/libs
nohup java -Djava.net.preferIPv4Stack=true -jar secureQR-0.0.1-SNAPSHOT.jar &
java -jar secureQR-0.0.1-SNAPSHOT.jar
- 백그라운드로 계속 실행할 때, nohup 명령어 이용하여 실행
- 일반적으로 테스트할때, java 명령어 이용하여 실행
- 실행 종료시
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
kill -TERM CURRENT_PID
로컬에서 서버 실행시 http://127.0.0.1:8080/api/v1/secureQR 기준 addCrypto -> generator -> authQR 순서로 실행
- 서버에 해시함수 방식, 암호화/복호화 방식에 대해 설정하는 API 요청 해당 API를 아무나 요청하면 안되기 때문에 현재는 HTTP BODY 에 "token" : "value" 형식으로 접근하도록 설정되어있음.
☁️ 서비스에 적합하게 JWT 적용, 또는 Spring Security 적용등이 가능
- 예시
아래와 같은 요청으로 암호화 방식 추가 가능
현재 예시에서는 (crypto 0: AES256, 1: RSA), (hash 0: MD5, 1:SHA256)
요청 URL : http://127.0.0.1:8080/api/v1/secureQR/addCrypto
{ "crypto" : 0, "hash" : 0, "token" : "SOTREE17_SERVER_REQUEST" }
- 예시 아래와 같은 요청으로 secureQR 생성
요청 URL : http://127.0.0.1:8080/api/v1/secureQR/generator
{ "authUrl" : "https://myserver.com", "c_index": 0, "data" : "https://github.com/SoTree17/secureQR-server-example", "width" : 250, "height" : 250 }
응답 : {"binary":"iVBORw0KGgoAAAAN... }
- 응답을 BASE64로 디코딩 한 뒤에 secureQR-module 속 qr.Generator의 createSecureQRImage 메소드로 바이트 코드를 QR코드 이미지로 변환 가능
- 안드로이드 앱 클라이언트가 특정 QR 이미지를 읽은 데이터를 HTTP BODY에 담아 보내면,
- 해당 서버에서 본 프로젝트에서 제공하는
secureQR인지 아닌지를 판단하고, secureQR이라면 QR코드의 데이터를 복호화하여 응답하는 API 요청
- 예시 아래와 같은 요청으로 읽은 데이터를 검증하고 복호화 된 값을 얻음
요청 URL : http://127.0.0.1:8080/api/v1/secureQR/authQR
{ "c_index": 0, "d_index": 0, "data": "4qbDZ2w3cSENWZPvPlgsBIeIGXA1xLRnvqVg0BTjnmVDiIIBxGK6HixygLyWOP3cJXH9aTQU7pqDbXKgqfSoueDvD/KVEoxKWLO2J/WrzXlkSrD23D5CV32kxSS5HGyp" }
응답 : { "resURL": "https://github.com/SoTree17/secureQR-server-example" }
- 보안 QR코드가 올바르다면 원본 데이터를 응답으로 보내준다.
| Component | Version | Homepage | License |
|---|---|---|---|
| Zxing | 3.4.1 | https://github.com/zxing/zxing | Apache-2.0 License |
| Gson | 2.8.8 | https://github.com/google/gson | Apache-2.0 License |
| Okhttp | 3.12.2 | https://square.github.io/okhttp/ | Apache-2.0 License |
| Converter-gson | 2.9.0 | https://github.com/square/retrofit | Apache-2.0 License |
| Converter-jackson | 2.9.0 | https://github.com/square/retrofit | Apache-2.0 License |
| Retrofit2 | 2.9.0 | https://github.com/square/retrofit | Apache-2.0 License |
| Spring-boot-starter-web | 2.5.3 | https://spring.io/projects/spring-boot | Apache-2.0 License |
| Junit | 4.13.2 | https://junit.org/junit4 | Eclipse Public License 1.0 |
