Apache HTTP Server에 대한 SSL/TLS 지원 활성화

8870 단어 Linux
[!NOTE]
이 글은 2013/09/08momoto.github.io 기고한 내용을 Qita로 옮긴 것이다
mod_ssl를 사용하여 Apache HTTP 서버에 대한 SSL/TLS 지원을 활성화합니다.SSL을 효력을 발생시키기 위해서는 RSA 기밀 키와 키 인증서의 키 인증서가 제3자 인증국에서 서명해야 하지만 이 글은 인증을 위해 자체 발급된 인증서를 사용했습니다.
단계 (1) RSA 기밀 키 생성, (2) 인증서 서명 요청(CSR) 생성, (3) 공개 키 인증서 발행, 네트워크 서버에 SSL/TLS 설정.(3) 의'공개 키 인증서 발행'은 원래 인증국에서 실행되는 프로그램이다.

1. OpenSSL을 사용하여 RSA 기밀 키 및 인증서 서명 요청 준비(신청자)


RSA 기밀 키 생성 사용openssl genrsa -out <秘密鍵ファイル名> <鍵長> 명령
openssl-genrsa
$ openssl genrsa -out localhost.key 2048
Generating RSA private key, 2048 bit long modulus
...................................................+++
...............+++
e is 65537 (0x10001)
2013년 9월까지 1024비트 키 길이 CSR을 받지 않는 인증국도 있었는데 키 길이는 보통 2048비트 이상이었다.
(참조)SSL에서 RSA 키 1024비트에 대한 질문 | 글로벌 서명openssl genrsa 옵션은 생성된 RSA 비밀 키를 다른 암호화 방식으로 암호화하거나 파일로 무작위 수를 생성하는 데 사용할 피드 값을 지정할 수 있습니다.AES 또는 DES와 같은 공통 키 암호화로 RSA 비밀 키를 암호화할 때 비밀 키에 암호문을 설정합니다.이 암호문은 웹 서버를 시작하거나 인증서 서명 요청 파일을 만들 때 입력해야 합니다.
그런 다음 RSA 기밀 키를 기반으로 인증서 서명 요청 파일을 만듭니다.OpenSSL 명령 사용openssl req -new -key <秘密鍵ファイル名> -out <証明書署名要求ファイル名>.CSR을 만들려면 경계 이름을 입력해야 합니다.
openssl-req
$ openssl req -new -key localhost.key -out localhost.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Shinjuku
Organization Name (eg, company) [Default Company Ltd]:Localhost, Local Area Network
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:localhost
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
(참조)
  • "digicret" 소개
  • 글로벌 서명이 뭐예요?
  • 디스틴 에픽이란?|교차 신탁
  • 디스팅 세션이란 무엇인가.
  • 2. 공개 키 인증서 발행(인증서)


    인증서 서명 요청 파일과 인증국의 개인 키에 따라 공개 키 인증서를 발행합니다.OpenSSL 명령 사용openssl ca -in <証明書署名要求ファイル名> -out <公開鍵証明書ファイル名>.
    openssl-ca
    $ openssl ca -in localhost.csr -out localhost.self-signed.crt
    Using configuration from /etc/pki/tls/openssl.cnf
    Enter pass phrase for /etc/pki/CA/private/cakey.pem:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number:
                ec:65:47:48:ff:6d:ff:cc
            Validity
                Not Before: Sep  7 00:00:00 2013 GMT
                Not After : Sep  7 00:00:00 2014 GMT
            Subject:
                countryName               = JP
                stateOrProvinceName       = Tokyo
                organizationName          = Localhost, Local Area Network
                commonName                = localhost
            X509v3 extensions:
                X509v3 Basic Constraints:
                    CA:TRUE
                Netscape Comment:
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier:
                    02:B3:E2:99:8B:C9:E8:F2:33:A7:27:1B:FD:D6:9E:64:C9:12:D2:7E
                X509v3 Authority Key Identifier:
                    keyid:15:F3:B6:82:FD:BB:41:AF:F2:AE:D9:BD:E1:C0:2E:B6:A5:23:C6:FA
    
    Certificate is to be certified until Sep  7 00:00:00 2014 GMT (365 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    
    인증국은 발행된 키 인증서를 신청자에게 건네주고 신청자는 키 인증서를 서버로 이동합니다.

    3. mod_ssl 설정(Apache HTTP Server)


     www.modssl.org와 발매된mod-ssl을 설치하다.
    $ sudo yum install mod_ssl
    
    Apache 실행 사용자가 읽을 수 있는 파일 경로에 위에서 설명한 RSA 기밀 키 및 공개 키 인증서를 설정합니다.마찬가지로 권한도 적절하게 설정된다.
    $ sudo mv localhost.key /etc/pki/tls/private/
    $ sudo mv localhost.self-signed.crt /etc/pki/tls/certs/
    $ sudo chmod 0600 /etc/pki/tls/certs/localhost.self-signed.crt
    $ sudo chmod 0600 /etc/pki/tls/private/localhost.key
    
    Apache의 설정 파일(/conf.d/ssl.conf 등)을 편집하고 SSL CeertificateFile 디렉토리와 SSL CeertificateKey File 디렉토리를 설정합니다.
    ssl.conf
    SSLCertificateFile /etc/pki/tls/certs/localhost.self-signed.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    
    Apache를 다시 시작합니다.RSA 개인 키는 암호화할 때 암호를 입력해야 합니다.
    $ sudo apachectl -t
    Syntax OK
    $ sudo /etc/init.d/httpd restart
    Stopping httpd:                                            [  OK  ]
    Starting httpd: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
    Some of your private key files are encrypted for security reasons.
    In order to read them you have to provide the pass phrases.
    
    Server localhost:443 (RSA)
    Enter pass phrase:
    
    OK: Pass Phrase Dialog successful.
                                                               [  OK  ]
    
    웹 서버에 접근해 보면 발행자 불명(sec error unknown issuer)으로 연결이 신뢰되지 않지만 암호화된 것 같습니다.


    인증서 정보를 표시한 후 입력한 설명 이름을 확인할 수 있습니다.또 이 글의 예에서도 주체와 발행자가 동일하다는 것을 확인할 수 있다.

    참고 자료

  • OpenSSL Documentation
  • mod_ssl – Apache HTTP Server
  • 안전하게 연결할 수 없음|Firefox 도움말
  • 보안 웹 서버 구축 및 활용 | ippa.go.jp
  • CA/Browser Forum
  • CA/브라우저 포럼 공용 인증서 발행 및 관리에 대한 기본 요구 사항 v.10|symanteccom
  • CA/브라우저 포럼 공용 인증서 게시 및 관리에 대한 기본 요구 사항ver10 | globalsign.com
  • 좋은 웹페이지 즐겨찾기