Vagrant 환경에서 SSL을 이용할 수 있도록(nginx편)

프로덕션 환경은 SSL로 움직이고 있는데, 개발 환경은 비SSL.
「개발 환경에서 SSL을 사용한 개발이 하고 싶은데, 할 수 없다・・・!!」 그런 당신을 위한 Tips입니다.

개발 환경(Vagrant)


  • OS: CentOS 6.4
  • nginx: 1.9.2

  • 사전 준비



    기본적으로 다음 작업은 rootユーザ에서 수행됩니다.

    openssl 설치



    openssl이 설치되어 있는지 확인
    $ openssl version
    

    실행 결과
    ===============================
    OpenSSL 1.0.1e-fips 11 Feb 2013
    ===============================
    

    설치되지 않은 경우 openssl 설치

    openssl 설치
    $ yum install mod_ssl
    

    파일을 저장할 디렉토리 만들기



    디렉토리 만들기
    $ mkdir /etc/nginx/ssl/
    

    ssl 아래에 필요한 파일을 저장합니다.

    올레올레 증명서 만들기



    SSL을 사용할 수 있도록 하려면 다음 세 가지가 필요합니다.
  • 비밀 키
  • 인증서 서명 요청 (CSR : 서버 인증서 발급을위한 서명 요청)
  • SSL 서버 인증서

  • 본래, 비밀키와 CSR은 스스로 작성해, 정규 스토어에서 SSL 서버 증명서를 구입합니다.
    SSL 서버 인증서를 구입할 때 CSR이 필요합니다.
    반면에 올레올레 인증서는 직접 SSL 서버 인증서를 만듭니다.

    그럼, 올레올레 증명서를 만들어 갑시다.

    1. 개인 키 생성



    개인 키 생성
    $ cd /etc/nginx/ssl/
    $ openssl genrsa 2048 > server.key
    

    2. CSR(인증서 서명 요청) 생성



    CSR 생성
    $ openssl req -new -key server.key > server.csr
    

    위의 명령을 실행하면 국가 이름, 조직 이름, 전자 메일 등을 입력하라는 메시지가 나타납니다.
    기본적으로 무시해 OK입니다만, 이번은 국가명과 개발 환경에서 사용하고 있는 FQDN만 입력했습니다.
    ******.jp 는 자신의 개발 환경에서 사용하고 있는 FQDN으로 바꾸어 주십시오.

    실행 결과
    Country Name (2 letter code) [XX]:JP                   ←入力
    State or Province Name (full name) []:
    Locality Name (eg, city) [Default City]:
    Organization Name (eg, company) [Default Company Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []: ******.jp   ←入力
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    

    여기서 작성한 CSR의 내용을 확인해 봅시다.

    CSR 내용을 확인
    $ openssl req -text < server.csr
    

    실행 결과
    Certificate Request:
        Data:
            Version: 0 (0x0)
            Subject: C=JP, L=Default City, O=Default Company Ltd, CN=******.jp
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (2048 bit)
                    Modulus:
                        (略)
                    Exponent: 65537 (0x10001)
            Attributes:
                (略)
        Signature Algorithm: sha1WithRSAEncryption
             (略)
    -----BEGIN CERTIFICATE REQUEST-----
          (略)
    -----END CERTIFICATE REQUEST-----
    
    Subject 에 주목하면 CSR을 생성했을 때 입력한 CJP , CN******.jp또한 Subject Public Key InfoPublic-Key 를 보면 (2048 bit) 입니다.
    이는 개인 키를 생성할 때 2048bit 키를 생성하도록 옵션을 지정했기 때문입니다.

    3. SSL 서버 인증서 생성



    드디어, 올레올레 SSL 서버 증명서의 작성입니다.

    SSL 서버 인증서 만들기
    $ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
    

    실행 결과
    Signature ok
    subject=/C=JP/L=Default City/O=Default Company Ltd/CN=******.jp
    

    CSR 내용을 확인했을 때와 마찬가지로 CJP , CN******.jp 입니다.
    이것으로, 올레올레 SSL 서버 증명서의 완성입니다.

    그런 다음 nginx에 SSL 설정을 포함시킵니다.

    SSL 구성(nginx)



    1. 설정 파일 편집



    설정 파일 편집
    ### すでにserverに関する設定が書かれているファイルがある場合、
    ### そのファイルを書き換えてください
    $ vim /etc/nginx/conf.d/ssl.conf
    
    ================================
    server {
      listen 443 default ssl;
      ssl on;
      ssl_certificate /etc/nginx/ssl/server.crt;
      ssl_certificate_key /etc/nginx/ssl/server.key;
    
      server_name ******.jp;
    
      location {
        (略)
      }
    }
    ================================
    

    2. 설정 파일의 문법이 잘못되지 않았는지 확인



    문법 점검
    $ service nginx configtest
    

    실행 결과
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    위의 표시가 나오면 괜찮습니다!
    오류가 발생하면 해당 위치를 다시 확인합시다.

    3.nginx 리로드



    nginx 리로드
    $ service nginx reload
    

    실행 결과
    Reloading nginx:          [  OK  ]
    
    OK 가 돌아와서 이것이 완벽합니다.
    드디어, SSL화된 것을 확인합니다!

    개발 환경 URL에 액세스



    URL
    https://******.jp
    

    브라우저로 접속해, 열쇠 마크가 표시되면, SSL화 성공입니다! ! !


    ※Chrome로 액세스했을 경우, 경고가 나옵니다.
    (해소법: 경고 페이지의 詳細設定 를 클릭→ ******.jpアクセスする(安全ではありません) 를 클릭)

    좋은 웹페이지 즐겨찾기