반응형

시놀로지 나스 사용자는 일반적으로 도메인이나 DDNS에 Let's Encrypt 인증서를 발급받아서 적용한다. 필자 역시 비슷한 구성으로 사용하다가, 보안을 위해 80, 443 같은 포트 개방을 모두 해제하고 Tailscale(VPN 터널링 서비스)을 설정했다. 그럼 내부(로컬)/외부(원격) 네트워크에 상관없이 나스는 항상 Tailscale을 통해서만 접속할 수 있다. 

 

만약 로컬 네트워크에 있을 때 Tailscale이 꺼진 상태에서 나스에 접속하려면 192.168.1.4 같은 사설 IP를 입력해서 접속해야 한다. DSM 제어판에서 HTTP 연결은 HTTPS로 리디렉션 되도록 설정했기 때문에 자동으로 HTTPS로 연결된다. 하지만 아래 이미지처럼 "연결이 비공개로 설정되어 있지 않습니다" 경고 메시지가 표시된다. 

 

 

주소창 왼편 사이트 정보 보기 버튼을 클릭하면 인증서가 올바르지 않다고 표시되고 있다. 도메인에 적용된 인증서가 192.168.1.4 같은 사설 IP에는 적용되지 않기 때문에 나오는 경고 메시지다. 이 문제를 해결하려면 로컬에서 사용할 자체 서명된(Self-Signed) 인증서를 별도로 발급해서 적용해야 한다. 

 

사이트 정보 보기 버튼

 

 

설정 방법


💡 Windows는 Bash 스크립트를 실행할 수 없기 때문에 WSL 설치가 필요하다. 설치 방법은 링크 참고. 

 

openssl.cnf 파일 생성

Chrome 58 버전부턴 Common Name(CA) 속성만으로는 호스트를 식별할 수 없다. 때문에 인증서에 호스트를 포함시키려면 Subject Alternative Name(SAN) 속성에도 해당 호스트를 포함시켜야 한다. SAN 속성은 cnf 구성 파일에서만 지정할 수 있기 때문에 cnf 파일을 별도로 작성해야 한다. — 참고 링크

 

cnf 파일 생성 방법을 일일이 설명하기엔 살짝 번거로워서 openssl.cnf 파일을 생성해 주는 간단한 스크립트 파일을 만들었다. 전체 스크립트 내용은 GitHub-Gist에서 확인할 수 있다. 터미널에서 아래 명령어를 실행하면 현재 폴더에 자동으로 openssl.cnf 파일을 생성한다.

curl -s https://gist.githubusercontent.com/romantech/2efb04248933dc2a691ee1f55caba35f/raw/cnf-generator.sh | bash -s -- -c KR -s Seoul -l Seoul -e your@email.com -d domain1.com,domain2.com -i 192.168.1.1,192.168.1.2

 

인증서가 적용될 -d(도메인) 혹은 -i(IP 주소) 플래그는 원하는 값으로 수정해야 한다. 예를 들어 192.168.1.1, 192.168.1.2 IP 주소에 모두 적용하고 싶다면 -i 192.168.1.1,192.168.1.2로 수정한다. 

 

사용할 수 있는 플래그 옵션은 다음과 같다. 

옵션 설명 기본값 예시
-c 국가 이름 US -c KR
-s 주/도 이름 California -s Seoul
-l 지역 이름 San Francisco -l Seoul
-o 조직 이름 Home -o Your Company
-n 일반 이름 localhost -n yourdomain.com
-e 이메일 주소   -e your@email.com
-d 도메인(쉼표로 구분)   -d domain1.com,domain2.com
-i IP 주소(쉼표로 구분)   -i 192.168.1.1,192.168.1.2

 

자체 서명된 인증서 생성

자체 서명된 인증서를 만들려면 아래 2가지가 필요하다.

 

  • 개인키 : 인증서에 사용하는 비밀키. 데이터 암호화와 서명에 사용
  • CSR : 인증서를 발급받기 위해 개인키와 함께 제출하는 요청 파일 (공개키, 도메인 정보 등 포함)

 

위 과정을 수행하는 스크립트 역시 GitHub-Gist에 업로드해 뒀다. 터미널에서 openssl.cnf 파일이 있는 폴더로 이동한 후 아래 명령어를 실행하면 사설 인증서 생성 과정을 자동으로 수행한다. 성공적으로 수행했다면 현재 폴더에 key.pem, cert.pem 파일이 생성된다. 💡 인증서를 생성하려면 OpenSSL이 설치되어 있어야 한다. 

curl -s https://gist.githubusercontent.com/romantech/d8c47317feaa31a8d462c0a2909ef2c1/raw/cert-generator.sh | bash -s -- -d 365

 

-d 플래그로 인증서 유효기간을 지정할 수도 있다. 예를 들어 2년을 지정하려면 -d 730으로 수정한다.

 

사용할 수 있는 플래그 옵션은 다음과 같다.

옵션 설명 기본값 예시
-d 인증서 유효 기간 365 -d 730
-o 개인키, 인증서 저장 위치 현재 폴더 -o ~/Desktop

 

시놀로지 나스에 인증서 등록

DSM 제어판 → 보안 → 인증서 → 추가 버튼 클릭 → 새 인증서 추가 → 인증서 파일 가져오기 화면으로 이동한다. 개인키는 key.pem, 인증서는 cert.pem 파일을 선택하고 확인 버튼을 누른다. 

 

 

인증서를 등록하면 localhost 발급자 이름의 인증서가 목록에 추가된 걸 확인할 수 있다. 이어서 상단 "설정" 버튼 클릭 → "구성" 탭 → "시스템 기본 설정 인증서"를 방금 추가한 인증서로 변경한다. 

 

 

신뢰할 수 있는 루트 기관에 인증서 추가

💡 아래 내용은 macOS 사용자를 위한 가이드다. Windows에서 설정 방법은 링크 참고.

 

먼저 macOS에 내장돼 있는 키체인 접근 앱을 실행한다. CMD + Space를 눌러서 Spotlight 창을 띄운 뒤 "키체인 접근"을 입력하면 된다. 키체인 창 좌측 "시스템" 메뉴 클릭 → "인증서" 탭으로 이동한 뒤 위에서 생성한 cert.pem 파일을 인증서 목록으로 드래그한다. 

 

 

등록한 인증서(localhost)를 더블 클릭하면 상세 정보 창이 뜬다. "▿신뢰" 드롭다운을 클릭하고 "이 인증서 사용 시" 항목의 값을 "항상 신뢰"로 변경한다. 

 

 

 

접속 테스트


모든 설정을 마치고 시놀로지 나스의 사설 IP(예: 192.168.1.4)로 접속해 보자. 주소창 왼쪽 사이트 정보 보기 창에서 "이 연결은 안전합니다"라고 표시되면 모두 잘 설정된 것이다. 

 

 

여담이지만 2023년 9월에 출시된 크롬 117 버전부터 주소창에 자물쇠 아이콘이 사라졌다. 이 아이콘은 HTTPS 연결을 의미했었는데, 사용자 대부분이 정확한 의미를 잘못 이해해서 제거했다고 한다. 연구에 따르면 11% 정도의 사용자만 자물쇠 아이콘의 의미를 올바르게 인식했다고 한다. 

반응형