Apache HTTPD를 사용한 인증

7544 단어

목차


  • Standard Authentication vs Mutual Authentication
  • Standard (One-Way) SSL Authentication
  • Two-way (mutual) SSL Authentication

  • 이 짧은 기사에서는 Apache HTTPD를 사용한 클라이언트 인증에 대해 설명합니다.

    표준 인증과 상호 인증

    Standard authentication (also known as one-way SSL authentication) is an authentication protocol in which only the client verifies the server certificate. Mutual authentication (two-way SSL authentication), on the other hand, is the authentication protocol in which two parties authenticate each other. It is the default mode of authentication in some protocols (such as IKE, SSH) and optional in some others (such as TLS).

    표준(단방향) SSL 인증

    서버 측



    요구 사항


  • mod_ssl을 사용한 Apache HTTPD 설치
  • 자체 서명 또는 CA 서명 서버 인증서

  • 인증서 준비


  • 루트 인증서 생성
  • openssl req -new -x509 -extensions v3_ca -keyout cakey.key -out cacert.pem

  • 서버 키 생성 및 요청 서명
  • openssl req -new -nodes -out server-req.pem -keyout server-key.key

  • 인증서 자체 서명
  • openssl ca -out server-cert.pem -infiles server-req.pem


  • Here, only a summary of certificate preparation steps provided. You can find many detailed documents about this process on the internet. Note that self-signed certificates are only for test purposes. Using them at production is discouraged.
    


    아파치 HTTPD 구현


  • "ssl.conf"파일을 구성하고 "VirtualHost"섹션 끝에 다음 줄을 추가합니다.

  • # SSL CONFIGURATION – SERVER SIDE
    # Enable the single way SSL authentication
    SSLEngine on
    
    # Apache client CA certificate
    SSLCertificateFile "/etc/httpd/conf/server-cert.pem"
    
    # Apache client CA certificate private key file
    SSLCertificateKeyFile  "/etc/httpd/conf/server-key.key"
    
    # END OF SSL CONFIGURATION – SERVER SIDE
    


  • 변경 사항을 적용하려면 Apache HTTPD를 다시 시작하십시오.
  • systemctl이 httpd를 다시 시작합니다.


  • 클라이언트 측(프록시)



    클라이언트 측에서 취해야 할 특별한 조치는 없습니다.

    양방향(상호) SSL 인증

    서버 측



    요구 사항


  • mod_ssl을 사용한 Apache HTTPD 설치
  • 자체 서명 또는 CA 서명 서버 인증서

  • 인증서 준비


  • 루트 인증서 생성
  • openssl req -new -x509 -extensions v3_ca -keyout cakey.key -out cacert.pem

  • 서버 키 생성 및 요청 서명
  • openssl req -new -nodes -out server-req.pem -keyout server-key.key

  • 인증서 자체 서명
  • openssl ca -out server-cert.pem -infiles server-req.pem


  • Here, only a summary of certificate preparation steps provided. You can find many detailed documents about this process on the internet. Note that self-signed certificates are only for test purposes. Using them at production is discouraged.
    


    아파치 HTTPD 구현


  • "ssl.conf"파일을 구성하고 "VirtualHost"섹션 끝에 다음 줄을 추가합니다.

  • # SSL CONFIGURATION – SERVER SIDE
    # Enable the single way SSL authentication
    SSLEngine on
    
    # Apache client CA certificate
    SSLCertificateFile "/etc/httpd/conf/server-cert.pem"
    
    # Apache client CA certificate private key file
    SSLCertificateKeyFile  "/etc/httpd/conf/server-key.key"
    
    # END OF SSL CONFIGURATION – SERVER SIDE
    


  • 변경 사항을 적용하려면 Apache HTTPD를 다시 시작하십시오.
  • systemctl이 httpd를 다시 시작합니다.


  • 클라이언트 측(프록시)



    요구 사항


  • mod_ssl 및 mod_proxy를 사용한 Apache HTTPD 설치
  • 서버의 자체 서명 또는 CA 서명 인증서
  • 클라이언트에 대한 자체 서명 또는 CA 서명 인증서
  • 서버 인증서의 CN

  • 인증서 준비


  • 2048비트보다 크거나 같은 키 생성
  • openssl genrsa -aes256 -out 파트너 도메인.키 2048


  • CN is very important here. Check the sample below. CN is provided by the server as 'partner-domain'.
    
    Country Name (2 letter code) [XX]:TR
    State or Province Name (full name) []:Marmara
    Locality Name (eg, city) [Default City]:Istanbul
    Organization Name (eg, company) [Default Company Ltd]:Telenity
    Organizational Unit Name (eg, section) []:Telenity
    Common Name (eg, your name or your server's hostname) []:partner-domain
    Email Address []:
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    


  • 인증서 서명 요청 생성
  • openssl req -key partner-domain.key -new -sha256 -out partner-domain.csr

  • 키를 RSA 키로 변환
  • openssl rsa -in partner-domain.key -outform pem > 파트너 도메인-rsa.key


  • Apache HTTPD only supports keys encoded in PKCS1 RSA, DSA or EC formats. Keys encoded in PKCS8 format (ie. starting with "-----BEGIN PRIVATE KEY-----") must be converted to a supported format.
    


  • 인증서에 서명
  • 자체 서명: openssl x509 -signkey partner-domain.key -in partner-domain.csr -req -out partner-domain.crt
  • CA-Sign: CSR 파일을 인증 서버 공급자에게 보냅니다.


  • 아파치 HTTPD 구현


  • 서버에서 받은 인증서와 키를 병합
  • 고양이 파트너-도메인-rsa.key 파트너-도메인.ca > 파트너-도메인-인클루드키.pem


  • The order of the key and the certificate does not matter. Two restrictions are
    
    1. RSA key must be used
    2. The merged file name must denote that it contains both the key and the certificate.
    


  • "ssl.conf"파일을 구성하고 "VirtualHost"섹션 끝에 다음 줄을 추가합니다.

  • # SSL CONFIGURATION – CLIENT SIDE
    # Enable SSL Client on this virtualhost (the traffic to the backends can be encrypted)
    SSLProxyEngine on
    
    # It’s mandatory for apache to authenticate the backends’ certificate.
    SSLProxyVerify require
    
    # Specify the depth of the check if the certificate has an CA approval
    SSLVerifyDepth  10
    
    # If CN and hostname will not match below configs must be off. Default values are on
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    
    # Apache client CA certificate (certificate of who released your client certificate)
    SSLProxyMachineCertificateFile "/etc/httpd/conf/partner-domain-includekey.pem"
    # Backends’ CA certificates (list of certificates of who released your backends’ certificates)
    SSLProxyCACertificateFile "/etc/httpd/conf/thirdparty-cert-provided-by-server.cert.pem"
    
    # END OF SSL CONFIGURATION – CLIENT SIDE
    



    Refer to the official Apache documentation at https://httpd.apache.org/docs/current/mod/mod_ssl.html.
    


  • "proxy.conf"파일 내에 관련 프록시 정의 추가

  • ProxyPass        /secureendpoint https://api.partner-domain/secureapi
    ProxyPassReverse /secureendpoint https://api.partner-domain/secureapi
    


  • 변경 사항을 적용하려면 Apache HTTPD를 다시 시작하십시오.
  • systemctl이 httpd를 다시 시작합니다.

  • 좋은 웹페이지 즐겨찾기