LibressSL과 H2O로 HTTP/2 진행

7684 단어 http2libresslALPNh2o
HTTP/2를 사용하려면 TLS 통신 소프트웨어가 필요합니다.
OpenSSL도 이 TLS 통신 소프트웨어로 사용되지만 LibressSL도 사용할 수 있다.
새 HTTP 서버 H2O와 LibressSL의 조합을 통해 HTTP/2의 통신을 확인합니다.

개시하다


HTTP/2 및 TLS 관계 및 제한 사항


HTTP/2 및 TLS 통신의 관계를 확인합니다.
HTTP/2를 통해 통신하기 위해서는 웹 서버 측과 브라우저 측 모두 HTTP/2 기능을 지원해야 합니다.또한 쌍방이 실현한 HTTP/2 규격은 반드시 같아야 한다.
HTTP/2 자체는 http와 https에 대응하는 규격을 제정했다.
어떤 경우에도 HTTP/2로 통신할 것인지 웹 서버 측과 브라우저 측 간에 결정해야 합니다.
  • http의 경우 "Upgrade:h2c"헤드
  • 사용
  • TLS 확장 ALPN
  • 을 https에서 사용
    그러나 현재 주요 브라우저는 https만 지원하는 상황에서 ALPN이 결정하는 사용자만 지원한다.따라서 브라우저를 대상으로 하는 웹 서버는 HTTP/2에 해당하는 경우 ALPN이 필요합니다.
    OpenSSL 1.0.2는 ALPN을 지원합니다.1.0.1은 지원되지 않습니다.LibressSL은 ALPN을 지원합니다.
    이상에 따라 OpenSSL을 전제로 HTTP/2 지원을 제공하는 웹 서버에 따라 OpenSSL은 1.0.2 이후를 사용해야 한다.그리고 그 대신 LibressSL도 논의할 수 있습니다.

    HTTP/2의 TLS 통신 소프트웨어에서 LibressL을 사용하는 장점


    HTTP/2 통신에서 새로운 암호 세트를 사용하는 ChaChaChaCha Chaa20-Poly 1305는 LibressSL을 선택하는 장점이다.
    OpenSSL 중 현재 개발 중인 1.1.0은 ChaChachaa20-Poly 1305를 지원하지만, 현재 1.0.2와 1.0.1은 지원하지 않는다.
    https://www.openssl.org/news/openssl-1.1.0-notes.html

    컨디션


    이번 확인은 CentOS 7(x86 64)에서 이루어졌습니다.

    H2O 및 LibressSL을 통해 HTTP/2 확인


    H2O는 HTTP/2를 지원하는 새 HTTP 서버입니다.
    H2O는 TLS 통신 소프트웨어로서 OpenSSL과 LibressSL 두 가지를 구상할 수 있다.
    이번에 우리는 LibressSL과 조합하여 최신 H2O를 구축하여 동작을 확인할 것이다.

    H2O 설치


    아래에서 최신 버젼 2.0.0을 다운로드하세요.
    https://github.com/h2o/h2o/archive/v2.0.0.tar.gz
    H2O version 2.0.0은 misc/libresssl-2.7.tar.부착 gz.
    이번에는 이걸로 빌딩을 진행합니다.
    (misc/libressl.mk 내 VERSION를 고치면 최신 LibreSSL도 사용할 수 있습니다.)
    # tar xf v2.0.0.tar.gz
    # cd h2o-2.0.0/
    # cmake -DWITH_BUNDLED_SSL=on .
    # make
    # make install
    
    이상/usr/local/의 아래쪽에 H2O가 설치되어 있습니다.

    H2O 설정 및 시작


    H2O/usr/local/share/doc/h2o/ 이하에는 문서와 샘플이 있습니다.
    이번에는 이 샘플을 활용하면서 아래의 설정 파일을 만들어 간단하게 HTTP/2로 연결 확인을 했다.
    /root/h2o.conf
    hosts:
      "test.com":
        listen:
          port: 80
        listen:
          port: 443
          ssl:
            certificate-file: /usr/local/share/doc/h2o/examples/h2o/server.crt
            key-file:         /usr/local/share/doc/h2o/examples/h2o/server.key
        paths:
          "/":
            file.dir: /usr/local/share/doc/h2o/examples/doc_root
    
    access-log: /var/log/h2o-access-log
    error-log: /var/log/h2o-error-log
    pid-file: /var/log/h2o-pid-file
    
    
    여기서 끝내도록 설정합니다.
    다음 명령은 H2O를 시작합니다.
    # /usr/local/bin/h2o -m daemon -c /root/h2o.conf
    

    동작 확인


    크롬 51.0.2704.84m(64-bit)로 https에 접근해보면'Welcome to H2O-an optimized HTTP 서버'문자열을 확인할 수 있다.
    또 아래 캡처한 바와 같이 프로토콜은 h2로 나타나 HTTP/2를 통해 통신한다.
    openssl s_client 명령 지정-alpn h2을 사용하여 ALPN이 유효한지 확인할 수도 있습니다.
    # /usr/local/bin/openssl s_client -port 443 -cipher 'CHACHA20' -alpn h2
    CONNECTED(00000003)
    ...
    ---
    SSL handshake has read 1565 bytes and written 387 bytes
    ---
    New, TLSv1/SSLv3, Cipher is ECDHE-RSA-CHACHA20-POLY1305-OLD
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    ALPN protocol: h2
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : ECDHE-RSA-CHACHA20-POLY1305-OLD
    ...
    
    ALPN protocol은 h2입니다.

    총결산


    HTTP/2를 지원하는 웹 서버를 구축하려면 ALPN이 필요합니다.
    ALPN을 지원하는 LibressSL은 HTTP/2를 제공하는 웹 서버에서 TLS 통신 소프트웨어로 사용할 수 있음을 확인합니다.
    LibressSL을 선택하면 HTTP/2에서 ChaChaChaa20-Pol1305를 사용할 수 있는 것도 매력이다.
    HTTP/2를 지원하는 상황에서 TLS 통신 소프트웨어로서 OpenSSL 외에 LibreSSL도 유력한 후보로 논의할 수 있다.

    좋은 웹페이지 즐겨찾기