본문 바로가기
Engineering/DICOM, DIMSE Protocol, HL7

dcmtk : orthanc PACS에 TLS 적용하여 DICOM 전송 (C-STORE)

by 알탱2 2021. 11. 21.
반응형

참고 링크 : orthanc book

dicom 파일 전송이 필요한 경우 DIMSE 프로토콜을 사용하기 위해 주로 dcmtk를 활용하고 있었다.
여기에 TLS 적용이 필요하게 되었는데, dcmtk와 tls를 검색어로 하여 검색을 해보다 보니 예제가 꽤 있긴 하였으나 key file 활용을 어떻게 해야하는지에 대해서는 잘 이해가 가질 않았다. 그런 도중 지인을 통해 orthanc book link를 받았고, 해당 링크의 가이드와 storescu --help 옵션 리스트를 참고하여 tls 적용 테스트를 해보게 되었다.
테스트는 성공하였으나, 사용방법 외 아직 모르는 부분이 많아서 일단 테스트 해봤던 내용 먼저 기록해 보려고 한다.

(1) openssl 로 key 생성하기

일단 TLS를 위해서는 private key와 public key(certification)의 key pair가 필요하다.
(centos7 서버에 openssl이 설치가 되어 있었기 때문에 따로 openssl 설치 방법은 생략)

그리고 각 client와 server는 서로의 공개키(=public key)를 사전에 share하고 있어야 하는 구조로 보인다.
(HTTPS에서는 TCP Socket Connection 과정 중 public key가 client에 전달되는 구조인데 DICOM protocol 에서는 그런 구조가 아니라 사전에 public key를 share하고 있어야 하는 것 같다. 이 부분이 dcmtk를 사용함에 있어서의 제약인 것인지 다른 option이나 사용 시나리오가 있는 것인지 잘 모르겠다. 아시는 분 계시면 좀 알려주세요..)

1) ORTHANC PACS key pair 생성 (ORTHANC PACS에서 사용할 key pair / public key는 Client에 사전 배포 필요)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout orthanc.key -out orthanc.crt -subj "/C=BE/CN=localhost"


2) dcmtk key pair 생성 (public key를 ORTHANC PACS에 TrustedCertificate로 등록 예정)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout dcmtk.key -out dcmtk.crt -subj "/C=BE/CN=localhost"


3) test key pair 생성 (ORTHANC PACS에 사전 등록되지 않은 key)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout test.key -out test.crt -subj "/C=BE/CN=localhost"

< test.key 파일 일부 캡쳐 >

openssl로 생성한 test private key

< test.crt 파일 일부 캡쳐 >

openssl로 생성한 test public key

 

(2) ORTHANC PACS에 TLS enable 및 key 파일 적용


1) docker-compose.yml
orthanc.json 파일에 추가한 key 파일을 docker volume을 활용해 container에 등록



2) orthanc.json
파일에 아래의 설정을 추가하여 TLS를 enable 하고, ORTHANC PACS의 private key, publick key, 그리고 신뢰할 수 있는 dcmtk의 public key를 추가한다.

"DicomTlsEnabled" : true,
"DicomTlsCertificate" : "/etc/orthanc/orthanc.crt",
"DicomTlsPrivateKey" : "/etc/orthanc/orthanc.key",
"DicomTlsTrustedCertificates" : "/etc/orthanc/dcmtk.crt",

 



(3) dcmtk : storescu로 dicom 전송

1) orthanc에 등록된 dcmtk key를 my key로 설정하여 전송 -> 전송 성공

storescu 10.120.1.40 4242 ./test.dcm +tls ./dcmtk.key ./dcmtk.crt +cf ./orthanc.crt -aet test -ll debug



2) orthanc에 등록되지 않은 test key를 my key로 설정하여 전송 -> 전송 실패

storescu 10.120.1.40 4242 ./test2.dcm +tls ./test.key ./test.crt +cf ./orthanc.crt -aet test -ll debug




** ORTHANC PACS에 여러 client의 public key를 등록하려면,

등록하고자 하는 N 개의 public key a.crt, b.crt, c.crt 를 준비하고 아래의 명령어로 all.crt 를 생성

cat a.crt b.crt c.crt > all.crt
반응형

댓글