자체 서명된 인증서를 사용한 Squid Peek/Bump/Splice

자체 서명된 인증서를 사용한 Squid Peek/Bump/Splice

TL: Ph.D., Squid v5.7은 생성된 인증서에 발급자를 포함하지 않습니다.

과거에는 다음을 통해 HTTPS 데이터 캐싱을 수행할 수 있었습니다.

  1. 오징어 만들기:
VERSION='4.11' ./configure --with-openssl --enable-ssl-crtd' ...
  1. 자체 서명된 인증서를 생성합니다.
sudo openssl req -new -newkey rsa:2048 -nodes \
-x509 -sha256 -extensions v3_ca -days 365 \
-keyout squid-ca-key.pem -out squid-ca-cert.pem \
-subj "/C=AU/ST=WA/L=Perth/O=ACME Pty Ltd/OU=Innovation/CN=squid.d2i.net.au/[email protected]"
  1. squid소유권을 프록시 사용자 (redhat) 또는 proxy(ubuntu) 로 변경

  2. 설정 squid.conf:

http_port 3128 \
  ssl-bump \
  generate-host-certificates=on \
  dynamic_cert_mem_cache_size=4MB \
  cert=/opt/squid-4.11/certs/squid-ca-cert-key.pem

sslcrtd_program /opt/squid-4.11/lib/security_file_certgen \
   -s /opt/squid-4.11/var/swap/ssl_db -M 16MB

acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
ssl_bump splice all

그러나 최근 Squid v5.7 설정으로 인해 인증서를 동적으로 생성하여 값을 비워두었음에도 불구하고 Squid를 사용하는 데 어려움을 겪었습니다 Issuer:. 출력에서 볼 수 있듯이 openssl s_client: 빈 인증서 발급자

다운로드한 파일의 전체 예는 다음과 같습니다.

openssl s_client \
-proxy squid.d2i.net.au:3128 -servername github.com \
-connect https://github.com/neovim/neovim/releases/download/v0.4.4/nvim-linux64.tar.gz

파일을 다운로드해 보세요

Squid 서비스가 내 클라이언트에게 유효한 인증서를 제공하지 못하는 이유가 궁금하신가요? 다음 서비스에서 curl다음 오류를 반환했습니다.

sudo curl --proxy squid.d2i.net.au:3128 https://github.com

컬: (60) SSL: X509 발급자 이름을 가져올 수 없습니다. 자세한 내용은 다음을 참조하세요.https://curl.se/docs/sslcerts.html 컬은 서버의 적법성을 확인할 수 없으므로 보안 연결을 설정할 수 없습니다. 이 상황과 해결 방법에 대해 자세히 알아보려면 위의 웹페이지를 방문하세요.

답변1

이는 예상보다 쉬웠습니다. -subj인증서를 생성하기 위한 플래그를 추가하는 것을 잊었거나 Ansible에서 처음 이 작업을 수행할 때 common_name 값이 필요했습니다(성공적으로 생성되었지만).

- name: Create certificate signing request (CSR) for new certificate
  community.crypto.openssl_csr_pipe:
    common_name: "{{ inventory_hostname }} personal computer"
    privatekey_path: "{{ key_dir }}/{{ inventory_hostname }}.key"
    basic_constraints:
      - 'CA:TRUE'
      - 'pathlen:0'
    basic_constraints_critical: yes
    subject_alt_name:
      - "DNS:{{ inventory_hostname }}.localdomain"
  run_once: true
  register: csr

관련 정보