一、https 是什么?
根据维基百科的解释:
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)">超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。 </code>
HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是大型网站的专利,所有普通的个人站长和博客均可以自己动手搭建一个安全的加密的网站。
如果一个网站没有加密,那么你的所有帐号密码都是明文传输。可想而知,如果涉及到隐私和金融问题,不加密的传输是多么可怕的一件事。
鉴于本博客的读者都是接近专业人士,我们不再多费口舌,直接进入正题吧。
二、使用 OpenSSL 生成 SSL Key 和 CSR
由于只有浏览器或者系统信赖的 CA 才可以让所有的访问者通畅的访问你的加密网站,而不是出现证书错误的提示。所以我们跳过自签证书的步骤,直接开始签署第三方可信任的 SSL 证书吧。
OpenSSL 在 Linux、OS X 等常规的系统下默认都安装了,因为一些安全问题,一般现在的第三方 SSL 证书签发机构都要求起码 2048 位的 RSA 加密的私钥。
同时,普通的 SSL 证书认证分两种形式,一种是 DV(Domain Validated),还有一种是 OV (Organization Validated),前者只需要验证域名,后者需要验证你的组织或公司,在安全性方面,肯定是后者要好。
无论你用 DV 还是 OV 生成私钥,都需要填写一些基本信息,这里我们假设如下:
域名,也称为 Common Name,因为特殊的证书不一定是域名:
组织或公司名字(Organization):
部门(Department):可以不填写,这里我们写
城市(City):
省份(State / Province):
国家(Country):
加密强度:2048 位,如果你的机器性能强劲,也可以选择 4096 位
按照以上信息,使用 OpenSSL 生成 key 和 csr 的命令如下
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)">openssl req -<span>new</span> -newkey rsa:<span>2048</span> -sha256 -nodes -<span>out</span> example_com.csr -keyout example_com.key -subj <span>"/C=CN/ST=Beijing/L=Beijing/O=Example Inc./OU=Web Security/CN=example.com"</span></code>
PS:如果是泛域名证书,则应该填写
你可以在系统的任何地方运行这个命令,会自动在当前目录生成
接下来你可以查看一下
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)">-----BEGIN CERTIFI<span>CATE</span> REQUEST----- MIICujC<span>CAaICAQAwdTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAO</span>BgNVBAcTB0JlaWppbmcxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEVMBMGA1UECxMM V2ViIFNlY3VyaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTC<span>CASIwDQYJKoZIhvcN</span>AQEBBQADggEPADC<span>CAQoCggEBAPME</span>+nvVCdGN9VWn+vp7JkMoOdpOurY<span>MPvclIbsI</span>iD7mGN982Ocl22O9wCV/<span>4</span>tL6DpTcXfNX+eWd7CNEKT4i+JYGqllqP3/CojhkemiY SF3jwncvP6VoST/HsZeMyNB71XwYnxF<span>CGqSyE3QjxmQ9ae38H2LIpCllfd1l7iVp</span>AX4i2+HvGTHFzb0XnmMLzq4HyVuEIMoYwiZX8hq+kwEAhKpBdfawkOcIRkbOlFew SEjLyHY+nruXutmQx1d7lzZCxut5Sm5At9al0bf5FOaaJylTEwNEpFkP3L29GtoU qg1t9Q8WufIfK9vXqQqwg8J1muK7kksnbYcoPnNgPx36kZs<span>CAwEAAaAAMA0GCSqG</span>SIb3DQEBBQUAA4IBAQCHgIuhpcgrsNwDuW6731/DeVwq2x3ZRqRBuj9/M8oONQen <span>1</span>QIacBifEMr+Ma+C+wIpt3bHvtXEF8c<span>CAJAR9sQ4Svy7M0w25DwrwaWIjxcf</span>/J8U audL/<span>029</span>CkAuewFCdBILTRAAeDqxsAsUyiBIGTIT+uqi+EpGG4OlyKK/MF13FxDj /oKyrSJDtp1Xr9R7iqGCs/Zl5qWmDaLN7/qxBK6vX2R/HLhOK0aKi1ZQ4cZeP7Mr <span>8</span>EzjDIAko87Nb/aIsFyKrt6Ze3jOF0/vnnpw7pMvhq+folWdTVXddjd9Dpr2x1nc y5hnop4k6kVRXDjQ4OTduQq4P+SzU4hb41GIQEz4 -----END CERTIFI<span>CATE</span> REQUEST----- </code>
这个 CSR 文件就是你需要提交给 SSL 认证机构的,当你的域名或组织通过验证后,认证机构就会颁发给你一个
而
三、Nginx 配置 HTTPS 网站以及增加安全的配置
前面已经提到,你需要提交 CSR 文件给第三方 SSL 认证机构,通过认证后,他们会颁发给你一个 CRT 文件,我们命名为
同时,为了统一,你可以把这三个文件都移动到
然后可以修改 Nginx 配置文件
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)"><span>server</span> {
<span>listen</span><span>80</span>;
<span>listen</span> [::]:<span>80</span> ssl ipv6>on</span>;
<span>listen</span><span>443</span> ssl;
<span>listen</span> [::]:<span>443</span> ssl ipv6>on</span>;
<span>server_name</span> example.com;
<span>ssl</span><span>on</span>;
<span>ssl_certificate</span> /etc/ssl/private/example_com.crt;
<span>ssl_certificate_key</span> /etc/ssl/private/example_com.key;
}
</code>检测配置文件没问题后重新读取 Nginx 即可
但是这么做并不安全,默认是 SHA-1 形式,而现在主流的方案应该都避免 SHA-1,为了确保更强的安全性,我们可以采取迪菲-赫尔曼密钥交换
首先,进入
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)"><span>cd</span> /etc/ssl/certs openssl dhparam -out dhparam.pem <span>2048</span><span># 如果你的机器性能足够强大,可以用 4096 位加密 </span></code>
生成完毕后,在 Nginx 的 SSL 配置后面加入
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)"><span>ssl_prefer_server_ciphers</span><span>on</span>;
<span>ssl_dhparam</span> /etc/ssl/certs/dhparam.pem;
<span>ssl_protocols</span> TLSv1 TLSv1.<span>1</span> TLSv1.<span>2</span>;
<span>ssl_ciphers</span><span>"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"</span>;
<span>keepalive_timeout</span><span>70</span>;
<span>ssl_session_cache</span> shared:SSL:<span>10m</span>;
<span>ssl_session_timeout</span><span>10m</span>;
</code>同时,如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)"><span>add_header</span> Strict-Transport-Security max-age=<span>63072000</span>;
<span>add_header</span> X-Frame-Options DENY;
<span>add_header</span> X-Content-Type-Options nosniff;
</code>同时也可以单独开一个 Nginx 配置,把 HTTP 的访问请求都用 301 跳转到 HTTPS
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)"><span>server</span> {
<span>listen</span><span>80</span>;
<span>listen</span> [::]:<span>80</span> ssl ipv6>on</span>;
<span>server_name</span> example.com;
<span>return</span><span>301</span><span>https://example.com<span>$request_uri</span></span>;
}
</code>四、可靠的第三方 SSL 签发机构
众所周知,前段时间某 NIC 机构爆出过针对 Google 域名的证书签发的丑闻,所以可见选择一家靠谱的第三方 SSL 签发机构是多么的重要。
目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有:
StartSSL
Comodo / 子品牌 Positive SSL
GlobalSign / 子品牌 AlphaSSL
GeoTrust / 子品牌 RapidSSL
其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌,一般都是三级四级证书,所以你会需要增加 CA 证书链到你的 CRT 文件里。
以 Comodo Positive SSL 为例,需要串联 CA 证书,假设你的域名是
那么,串联的命令是
<codeCourier New',monospace; font-size:undefined; padding:16px 32px; color:rgb(248,248,242); white-space:pre-wrap; display:block; overflow-x:auto; background:rgb(35,36,31)"><span>cat</span> example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.signed.crt </code>
在 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教程有兴趣的朋友有所帮助。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号