TLS 1.2 를 지원 하 는 웹 서버 Linux 버 전 0 부터 구축 (3) 무료 HTTPS 인증서 만 들 기

11444 단어 Linux 서버 설정
박문 목록
  • 성명
  • Lets Encrypt 무료 로 사용 하기 좋 은 HTTPS 인증서
  • 신청 도구
  • 계 정 만 들 기
  • CSR 파일 만 들 기
  • 인증 서비스 설정
  • 사이트 인증서 획득
  • 자동 업데이트 설정
  • 참고 문헌

  • 성명
    본 논문 의 대부분 작업 은 Jerry Qu 의 Let 's Encrypt, 무료 로 사용 하기 좋 은 HTTPS 인증 서 를 참고 합 니 다. 그러나 원문 에 설 치 된 HTTP 서 비 스 는 Nginx 입 니 다. 본 고 는 Tomcat 9 입 니 다. 만약 에 사용 하 는 것 도 Nginx 라면 Let' s Encrypt, 무료 로 사용 하기 좋 은 HTTPS 인증 서 를 이동 하 십시오. 만약 에 여러분 이 사용 할 때 어떤 문 제 를 발견 하면 댓 글 에서 함께 토론 하 는 것 도 환영 합 니 다.
    Let 's Encrypt, 무료 HTTPS 인증서
    무료, 자동화, 개방 적 인 인증서 발급 서비스.이 는 ISRG (Internet Security Research Group, 인터넷 안전 연구 팀) 가 서 비 스 를 제공 하고 ISRG 는 미국 캘 리 포 니 아주 에서 온 공익 조직 이다.Let 's Encrypt 는 Mozilla, Cisco, Akamai, Electronic Frontier Foundation 과 Chrome 등 여러 회사 와 기구의 지원 을 받 아 매우 빠르게 발전 했다.
    Let 's Encrypt 인증 서 를 신청 하 는 것 은 무료 일 뿐만 아니 라 매우 간단 합 니 다. 매번 90 일의 유효기간 만 있 지만 스 크 립 트 를 통 해 정기 적 으로 업데이트 할 수 있 습 니 다.
    신청 도구
    Jerry Qu 는 공식 적 인 도 구 를 사용 하지 않 고 acme - tiny 라 는 더욱 작은 오픈 소스 도 구 를 사 용 했 습 니 다. 저 는 HTTPS 신청 에 익숙 하지 않 습 니 다. 이번 이 첫 번 째 신청 입 니 다. 먼저 Jerry Qu 방식 으로 한 번 하고 자신 이 겪 은 문 제 를 기록 하기 로 했 습 니 다.
    ACME 는 모두 Automated Certificate Management Environment 라 고 하 는데 직역 하면 자동화 인증서 관리 환경 이라는 뜻 이다. Let 's Encrypt 의 인증서 발급 과정 은 바로 ACME 프로 토 콜 을 사용한다.ACME 프로 토 콜 에 대한 더 많은 자 료 는 이 창고 에서 찾 을 수 있 습 니 다.
    계 정 만 들 기
    우선 디 렉 터 리 를 만 듭 니 다. 예 를 들 어 /usr/ssl 각종 임시 파일 과 마지막 인증서 파일 을 저장 합 니 다.이 디 렉 터 리 에 들 어가 서 Let 's Encrypt 에서 신분 을 식별 할 수 있 는 RSA 비밀 키 를 만 듭 니 다.
    [root@VM_195_229_centos usr]# mkdir ssl
    [root@VM_195_229_centos usr]# cd ssl
    [root@VM_195_229_centos ssl]# openssl genrsa 4096 > account.key
    Generating RSA private key, 4096 bit long modulus
    ................................................................++
    ..........................................................................++
    e is 65537 (0x10001)
    [root@VM_195_229_centos ssl]# ls -l 
    total 4
    -rw-r--r-- 1 root root 3243 Jul 31 20:08 account.key

    CSR 파일 생 성
    이 어 CSR (Certificate Signing Request, 인증서 서명 요청) 파일 을 만 들 수 있 습 니 다.그 전에 도 메 인 네 임 비밀 키 (위의 계 정 비밀 키 를 사용 하지 마 십시오) 를 만들어 야 합 니 다. 인증서 의 유형 에 따라 도 메 인 네 임 비밀 키 도 RSA 와 ECC 두 가지 유형 을 선택 할 수 있 습 니 다.다음 두 가지 방식 은 실제 상황 에 따라 둘 중 하 나 를 선택 하 십시오.
  • RSA 비밀 키 만 들 기 (호환성 좋 음):
  • openssl genrsa 4096 > domain.key
  • ECC 비밀 키 만 들 기 (일부 오래된 운영 체제, 브 라 우 저 는 지원 되 지 않 습 니 다. 장점 은 인증서 의 부피 가 작 습 니 다):
  • #secp256r1
    openssl ecparam -genkey -name secp256r1 | openssl ec -out domain.key
    
    #secp384r1
    openssl ecparam -genkey -name secp384r1 | openssl ec -out domain.key

    ECC 인증서 에 대한 더 많은 소 개 는 여 기 를 클릭 하 십시오.
    비밀 키 파일 이 있 으 면 CSR 파일 을 생 성 할 수 있 습 니 다.CSR 에 서 는 도 메 인 네 임 테이프 www 와 없 는 www 두 가지 상황 을 모두 추가 하 는 것 을 추천 합 니 다. 다른 도 메 인 은 필요 에 따라 추가 할 수 있 습 니 다 (현재 인증서 한 장 에 최대 100 개의 도 메 인 네 임 을 포함 할 수 있 습 니 다).
    openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config printf "[SAN]
    subjectAltName=DNS:yoursite.com,DNS:www.yoursite.com"
    )) > domain.csr

    이 단 계 를 실행 할 때 /etc/ssl/openssl.cnf 파일 을 찾 을 수 없다 면 /usr/local/openssl/ssl/openssl.cnf 존재 하 는 지 확인 하 십시오.만약 안 된다 면 대화 식 으로 CSR 을 만 들 수도 있 습 니 다. (Common Name 은 도 메 인 이름 이 어야 합 니 다.)
    openssl req -new -sha256 -key domain.key -out domain.csr

    여기 서 제 openssl.cnf 디 렉 터 리 는 /etc/pki/tls/openssl.cnf 입 니 다. 먼저 이 파일 을 잠시 사용 하고 상호작용 으로 생 성 하지 않 았 습 니 다. CSR 파일 을 생 성 하 는 데 문제 가 없 었 습 니 다. 이어서 내 려 갑 니 다.
    인증 서비스 설정
    CA 가 DV (Domain Validation) 인증 서 를 발급 할 때 도 메 인 이름 소유권 을 검증 해 야 한 다 는 것 을 알 고 있 습 니 다.전통 적 인 CA 의 인증 방식 은 보통 [email protected] 에 인증 메 일 을 보 냅 니 다. Let 's Encrypt 는 서버 에 무 작위 인증 파일 을 만 들 고 CSR 을 만 들 때 지정 한 도 메 인 에 접근 합 니 다. 방문 할 수 있다 면 이 도 메 인 에 대한 통제 권 이 있 음 을 나타 냅 니 다.
    Nginx 의 설정 방안 은 Let 's Encrypt, 무료 로 사용 할 수 있 는 HTTPS 인증 서 를 참고 하 십시오.
    인증 파일 을 저장 할 디 렉 터 리 를 새로 만 듭 니 다. /usr/ssl/challenges 디 렉 터 리:
    [root@VM_195_229_centos ssl]# mkdir /usr/ssl/challenges
    Tomcat 의 설치 디 렉 터 리 를 찾 습 니 다. conf/server.xml 다음 에 설명 되 어 있 는 설정 정 보 를 찾 습 니 다.
    -- Define a SSL/TLS HTTP/1.1 Connector on port 8443
             This connector uses the NIO implementation. The default
             SSLImplementation will depend on the presence of the APR/native
             library and the useOpenSSL attribute of the
             AprLifecycleListener.
             Either JSSE or OpenSSL style configuration may be used regardless of
             the SSLImplementation selected. JSSE style configuration is used below.
        -->
        --
        port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true">
            
                "conf/localhost-rsa.jks"
                             type="RSA" />
            
        
        -->
        -- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
             This connector uses the APR/native implementation which always uses
             OpenSSL for TLS.
             Either JSSE or OpenSSL style configuration may be used. OpenSSL style
             configuration is used below.
        -->
        --
        port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                   maxThreads="150" SSLEnabled="true" >
            "org.apache.coyote.http2.Http2Protocol" />
            
                "conf/localhost-rsa-key.pem"
                             certificateFile="conf/localhost-rsa-cert.pem"
                             certificateChainFile="conf/localhost-rsa-chain.pem"
                             type="RSA" />
            
        
        -->

    사이트 인증서 가 져 오기
    먼저 acme - tiny 스 크 립 트 를 이전 /usr/ssl 디 렉 터 리 에 저장 합 니 다.
    [root@VM_195_229_centos ssl]# wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

    계 정 비밀 키, CSR 및 인증 디 렉 터 리 를 지정 하고 스 크 립 트 를 실행 합 니 다.
    [root@VM_195_229_centos ssl]# python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir ~/www/challenges/ > ./signed.crt

    모든 것 이 정상 이면 현재 디 렉 터 리 에 하나의 signed.crt 가 생 성 됩 니 다. 이것 이 바로 신청 한 인증서 파일 입 니 다.
    도 메 인 네 임 DNS 를 국내 에 해석 하면 이런 오류 가 발생 할 수 있 습 니 다.
    ValueError: Wrote file to /home/xxx/www/challenges/oJbvpIhkwkBGBAQUklWJXyC8VbWAdQqlgpwUJkgC1Vg, but couldn't download http://www.yoursite.com/.well-known/acme-challenge/oJbvpIhkwkBGBAQUklWJXyC8VbWAdQqlgpwUJkgC1Vg

    도 메 인 이름 이 외국 에서 해석 되 지 않 을 가능성 이 높 기 때문에 외국 VPS 를 찾 아 검증 할 수 있 습 니 다.제 도 메 인 이름 은 최근 에 DNSPod 에서 알 리 클 라 우 드 로 바 뀌 었 고 마지막 에 CloudXNS 로 바 뀌 었 습 니 다. 바로 최근 에 두 집 이 외국 에서 모두 불안정 하기 때 문 입 니 다.만약 당신 도 비슷 한 상황 에 부 딪 혔 다 면, 잠시 외국 의 DNS 분석 서비스 업 체, 예 를 들 어 dns. he. net 을 사용 할 수 있 습 니 다.만약 아직도 정 해 지지 않 는 다 면, '닐 팡 / le' 이라는 도구 의 DNS 모드 를 시험 해 볼 수도 있다.
    사이트 인증 서 를 완성 한 후 Let 's Encrypt 의 중간 인증 서 를 다운로드 해 야 합 니 다.이전 글 에서 HTTPS 인증 서 를 설정 할 때 중간 인증 서 를 빠 뜨리 지 말고 루트 인증 서 를 포함 하 는 것 도 잊 지 말 라 고 했 습 니 다.Nginx 설정 에서 중간 인증서 와 사이트 인증 서 를 합 쳐 야 합 니 다.
    wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
    cat signed.crt intermediate.pem > chained.pem

    OCSP Stapling 을 원활 하 게 사용 할 수 있 도록 루트 인증서 와 중간 인증 서 를 합 칩 니 다.
    wget -O - https://letsencrypt.org/certs/isrgrootx1.pem > root.pem
    cat intermediate.pem root.pem > full_chained.pem

    최종 적 으로 Nginx 의 인증서 설정 과 reload 서 비 스 를 수정 하면 됩 니 다.
    자동 업데이트 설정
    Let 's Encrypt 에서 발급 한 인증 서 는 90 일 유효기간 이 므 로 스 크 립 트 를 사용 하여 정기 적 으로 업데이트 하 는 것 을 추천 합 니 다.예 를 들 어 저 는 renew_cert.sh 을 만 들 고 chmod a+x renew_cert.sh 를 통 해 집행 권한 을 부 여 했 습 니 다.파일 내용 은 다음 과 같 습 니 다.
    #!/bin/bash
    
    cd /home/xxx/www/ssl/
    python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /home/xxx/www/challenges/ > signed.crt || exit
    wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
    cat signed.crt intermediate.pem > chained.pem
    service nginx reload

    crontab 에서 절대 경 로 를 사용 하 는 것 이 비교적 안전 합 니 다. crontab -e 다음 과 같은 내용 을 가입 합 니 다.
    0 0 1 * * /home/xxx/shell/renew_cert.sh >/dev/null 2>&1

    이렇게 되면 증 서 는 매달 자동 으로 업데이트 되 고 한 번 고생 하면 영원히 편안 해진 다.실제로 Let 's Encrypt 는 공식 적 으로 인증서 의 유효기간 을 90 일 로 정 하 는 것 은 더욱 안전 하고 더욱 중요 한 것 은 사용자 가 자동화 배치 방안 을 사용 하도록 격려 하 는 것 이다.
    참고 문헌
  • Let 's Encrypt, 무료 로 사용 하기 좋 은 HTTPS 인증서
  • HTTPS 의 흔 한 배치 문제 및 해결 방안 3. SSL / TLS Configuration HOW - TO [Tomcat 홈 페이지]
  • 좋은 웹페이지 즐겨찾기