상황
리눅스에서 DICOM을 서버 A에서 서버 B로 전송해야한다.보안문제로 사설인증서 또는 공인인증서를 써야한다.
방법
dcmtk를 이용해서 DICOM을 전송한다.storescp, storescu의 tls옵션으로 인증서를 적용한다.
사설 인증서로 TLS 적용
1. 키 만들기
서버 두개가 있다.- Sender : 파일을 보내는 서버
- Receiver : Sender로부터 파일을 받는 서버
각 서버의 private key와 public key를 만든다.
- Sender 서버의 private key(sender.key)와 public key(sender.crt)를 생성한다.
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout sender.key -out sender.crt -subj "/C=BE/CN=localhost"
- Receiver 서버의 private key(receiver.key)와 publick key(receiver.crt)를 생성한다.
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout receiver.key -out receiver.crt -subj "/C=BE/CN=localhost"
2. Public key 교환
서로의 public key를 공유한다. 그럼 각 서버에 아래 파일들을 가지게 된다.- Sender : sender.key, sender.crt, receiver.crt
- Receiver : receiver.key, receiver.crt, sender.crt
3. Receiver에서 storescp를 실행, DICOM 파일을 받을 준비한다.
$ storescp +xa +uf -xs -od /home/jihoon/recv \
--aetitle receiver 13000 -fe .dcm \
+tls ./receiver.key ./receiver.crt +cf ./sender.crt
명령어를 해석하자면,receiver 서버로 dicom을 수신할건데,
파일은 .dcm 으로 저장하고, 저장위치는 /home/jihoon/recv 디렉토리,
receiver의 ae title은 receiver로 하고,
port 13000으로 받는다.
tls 옵션을 쓰려면, receiver의 개인키+공개키와 보내는 쪽의 공개키를 포함한다.
옵션 참고 링크 : https://support.dcmtk.org/docs/storescp.html
Option +cf OR -ic
+cf 옵션을 쓰면 파일을 보내는 서버의 공개키를 파일을 받는 서버에 등록해야한다.인증된 서버에게서만 파일을 받게되는 것.
그냥 아무서버에서나 파일을 받고 싶으면 +cf 대신 -ic 옵션을쓰고 보내는 서버의 개인키를 업로드 하지 않으면 된다.
4. sender 서버에서 storescu 이용, DICOM을 receiver 서버로 전송
storescu {sender's ipaddress} 13000 ./test.dcm \
+tls ./sender.key ./sender.crt +cf ./receiver-CA.crt -aet sender -ll debug
공인 인증서로 TLS 적용
1. 키 만들기
공인 인증서를 발급받는 방법은 생략한다.pfx 파일이 있는 경우, 아래 명령어로 .key과 .crt파일, 그리고 CA Certificate을 추출할수 있다.
- .pfx -> .key 추출하기
$ openssl pkcs12 -in sender.pfx -nocerts -nodes -out sender.key $ openssl pkcs12 -in receiver.pfx -nocerts -nodes -out receiver.key
> - .pfx -> .crt 추출하기
$ openssl pkcs12 -in sender.pfx -clcerts -nokeys -out sender.crt $ openssl pkcs12 -in receiver.pfx -clcerts -nokeys -out receiver.crt
- .pfx -> CA certificate 추출하기
$ openssl pkcs12 -in sender.pfx -nodes -nokeys -cacerts -out sender-CA.crt $ openssl pkcs12 -in receiver.pfx -nodes -nokeys -cacerts -out receiver-CA.crt
2. CA Cerificate 교환
사설 인증서 이용할 때는 public key를 공유했고, CA certificate 이용할때는 CA certificate를 공유한다.그럼 각 서버에 아래 파일들을 가지게 된다.
- Sender : sender.key, sender.crt, receiver-CA.crt
- Receiver : receiver.key, receiver.crt, sender-CA.crt
3. Receiver에서 storescp를 실행, DICOM 파일을 받을 준비한다.
$ storescp +xa +uf -xs -od /home/jihoon/recv \
--aetitle receiver 13000 -fe .dcm \
+tls ./receiver.key ./receiver.crt +cf ./sender-CA.crt
+tls옵션에서 +cf 이용시, sender의 public key 대신 CA certificate를 이용하는 것만 다르다.4. sender 서버에서 storescu 이용, DICOM을 receiver 서버로 전송
storescu {sender's ipaddress} 13000 ./test.dcm \
+tls ./sender.key ./sender.crt +cf ./receiver-CA.crt -aet sender -ll debug
0 댓글