>  기사  >  백엔드 개발  >  NGINX SSL 인증서 구성 + HTTPS 웹사이트 튜토리얼 구축

NGINX SSL 인증서 구성 + HTTPS 웹사이트 튜토리얼 구축

WBOY
WBOY원래의
2016-08-08 09:22:531518검색

1. HTTPS란 무엇인가요?

웹사이트가 암호화되지 않은 경우 모든 계정 비밀번호는 일반 텍스트로 전송됩니다. 개인 정보 보호 및 재정 문제와 관련하여 암호화되지 않은 전송이 얼마나 끔찍한지 상상할 수 있습니다.

超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。 이 블로그 독자들은 모두 전문가에 가깝기 때문에 더 이상 고민하지 않고 바로 본론으로 들어가겠습니다.

2. OpenSSL을 사용하여 SSL 키 및 CSR 생성

브라우저나 시스템에서 신뢰하는 CA만이 모든 방문자가 인증서 오류 없이 암호화된 웹사이트에 원활하게 액세스할 수 있도록 허용하기 때문입니다. 이제 자체 서명된 인증서 단계를 건너뛰고 바로 타사의 신뢰할 수 있는 SSL 인증서에 서명해 보겠습니다.

OpenSSL은 Linux, OS X 등 일반 시스템에 기본적으로 설치됩니다. 일부 보안 문제로 인해 현재 대부분의 타사 SSL 인증서 발급 기관에서는 최소 2048비트 RSA 암호화 개인 키를 요구합니다.

동시에 일반 SSL 인증서 인증에는 두 가지 형태가 있는데, 하나는 DV(Domain Validated)이고 다른 하나는 OV(Organization Validated)입니다. 전자는 도메인 이름만 확인하면 됩니다. 후자가 조직을 확인해야 하거나 보안 측면에서는 후자가 확실히 더 좋습니다.

DV 또는 OV를 사용하여 개인 키를 생성하려면 몇 가지 기본 정보를 입력해야 합니다. 여기서는 다음을 가정합니다.

일반 이름이라고도 하는 도메인 이름. 인증서가 반드시 도메인 이름일 필요는 없습니다:

조직 또는 회사 이름(Organization):

example.com부서: 입력할 필요는 없습니다. 여기에는

Example, Inc.시(시):

Web Security시/도:

Beijing국가:

Beijing암호화 강도: 2048 비트, 머신의 성능이 강력하다면 4096비트를 선택할 수도 있습니다

위 정보에 따르면 OpenSSL을 사용하여 키와 csr을 생성하는 명령은 다음과 같습니다CN

PS: 범도메인 이름 인증서인 경우

을 입력해야 합니다. 시스템 어디에서나 이 명령을 실행할 수 있으며 openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc./OU=Web Security/CN=example.com"

두 파일은 현재 디렉터리에 자동으로 생성됩니다. *.example.com

다음으로 확인하면

다음과 같은 긴 텍스트 문자열을 얻을 수 있습니다. example_com.csrexample_com.key

이 CSR 파일은 SSL 인증 기관이 인증을 통과하면 인증 기관에서

example_com.csr

을 발급하며 -----BEGIN CERTIFICATE REQUEST----- MIICujCCAaICAQAwdTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAOBgNVBAcTB0JlaWppbmcxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEVMBMGA1UECxMM V2ViIFNlY3VyaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPME+nvVCdGN9VWn+vp7JkMoOdpOurYMPvclIbsIiD7mGN982Ocl22O9wCV/4tL6DpTcXfNX+eWd7CNEKT4i+JYGqllqP3/CojhkemiY SF3jwncvP6VoST/HsZeMyNB71XwYnxFCGqSyE3QjxmQ9ae38H2LIpCllfd1l7iVpAX4i2+HvGTHFzb0XnmMLzq4HyVuEIMoYwiZX8hq+kwEAhKpBdfawkOcIRkbOlFew SEjLyHY+nruXutmQx1d7lzZCxut5Sm5At9al0bf5FOaaJylTEwNEpFkP3L29GtoU qg1t9Q8WufIfK9vXqQqwg8J1muK7kksnbYcoPnNgPx36kZsCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQCHgIuhpcgrsNwDuW6731/DeVwq2x3ZRqRBuj9/M8oONQen 1QIacBifEMr+Ma+C+wIpt3bHvtXEF8cCAJAR9sQ4Svy7M0w25DwrwaWIjxcf/J8U audL/029CkAuewFCdBILTRAAeDqxsAsUyiBIGTIT+uqi+EpGG4OlyKK/MF13FxDj /oKyrSJDtp1Xr9R7iqGCs/Zl5qWmDaLN7/qxBK6vX2R/HLhOK0aKi1ZQ4cZeP7Mr 8EzjDIAko87Nb/aIsFyKrt6Ze3jOF0/vnnpw7pMvhq+folWdTVXddjd9Dpr2x1nc y5hnop4k6kVRXDjQ4OTduQq4P+SzU4hb41GIQEz4 -----END CERTIFICATE REQUEST----- 과 함께 Nginx 구성을 사용해야 합니다. 잘 보관되어야 하며, 제3자에게 유출되어서는 안 됩니다.

example_com.crt3. Nginx는 HTTPS 웹사이트를 구성하고 보안 구성을 추가합니다

앞서 언급했듯이 인증서를 통과한 후 타사 SSL 인증 기관에 CSR 파일을 제출해야 합니다. CRT 파일에 이름을 붙였습니다. example_com.keyexample_com.crt

同时,为了统一,你可以把这三个文件都移动到 /etc/ssl/private/ 目录。

然后可以修改 Nginx 配置文件

server { listen80; listen [::]:80 ssl ipv6>on; listen443 ssl; listen [::]:443 ssl ipv6>on; server_name example.com; sslon; ssl_certificate /etc/ssl/private/example_com.crt; ssl_certificate_key /etc/ssl/private/example_com.key; }

检测配置文件没问题后重新读取 Nginx 即可

nginx -t && nginx -s reload

但是这么做并不安全,默认是 SHA-1 形式,而现在主流的方案应该都避免 SHA-1,为了确保更强的安全性,我们可以采取迪菲-赫尔曼密钥交换

首先,进入 /etc/ssl/certs 目录并生成一个 dhparam.pem

cd /etc/ssl/certs openssl dhparam -out dhparam.pem 2048# 如果你的机器性能足够强大,可以用 4096 位加密

生成完毕后,在 Nginx 的 SSL 配置后面加入

ssl_prefer_server_cipherson; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers"EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; keepalive_timeout70; ssl_session_cache shared:SSL:10m; ssl_session_timeout10m;

同时,如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问

add_header Strict-Transport-Security max-age=63072000; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff;

同时也可以单独开一个 Nginx 配置,把 HTTP 的访问请求都用 301 跳转到 HTTPS

server { listen80; listen [::]:80 ssl ipv6>on; server_name example.com; return301https://example.com$request_uri; }

四、可靠的第三方 SSL 签发机构

众所周知,前段时间某 NIC 机构爆出过针对 Google 域名的证书签发的丑闻,所以可见选择一家靠谱的第三方 SSL 签发机构是多么的重要。

目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有:

StartSSL

Comodo / 子品牌 Positive SSL

GlobalSign / 子品牌 AlphaSSL

GeoTrust / 子品牌 RapidSSL

其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌,一般都是三级四级证书,所以你会需要增加 CA 证书链到你的 CRT 文件里。

以 Comodo Positive SSL 为例,需要串联 CA 证书,假设你的域名是 example.com

那么,串联的命令是

cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.signed.crt

在 Nginx 配置里使用 example_com.signed.crt 即可

如果是一般常见的 AplhaSSL 泛域名证书,他们是不会发给你 CA 证书链的,那么在你的 CRT 文件后面需要加入 AlphaSSL 的 CA 证书链

AlphaSSL Intermediate CA

五、针对企业的 EV SSL

EV SSL,是 Extended Validation 的简称,更注重于对企业网站的安全保护以及严格的认证。

最明显的区别就是,通常 EV SSL 显示都是绿色的条,比如本站的 SSL 证书就是 EV SSL。

如果贵公司想获取专业的 EV SSL,可以随时联系我们 info at cat dot net

六、本文参考文献

Apache + WordPress + SSL 完全指南

OpenSSL CSR Creation

NGINX - PhoenixWiki

转自:https://s.how/nginx-ssl/

以上就介绍了NGINX 配置 SSL 证书 + 搭建 HTTPS 网站教程,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:정규식 예다음 기사:정규식 예