Nginx 配置 HTTPS自签名证书
工具:
OpenSSL ssl的开源实现,几乎实现了市面上所有的加密
libcrypto: 通用加密库, 任何软件要实现加密功能 链接调用这个库
libssl: TLS/SSL 加密库
openssl: 命令行工具 多功能多用途工具 实现私有证书颁发机构
子命令:
genrsa [-out filename] [-passout arg] [numbits]
generate an RSA private key
生成一个 RSA 的私钥 (公钥是从私钥中提取的,有了私钥 就有公钥)
openssl rsa -in ca.key -pubout 提取私钥
创建证书的基本流程是这样:
- 生成自己的服务端私钥 Server Key
- 输入基本信息并用私钥签名生成CSR 证书签名请求
- 提交CSR给证书机构CA(免费或商业证书)签名生成CRT,或自己做CA签名生成CRT(自签名证书)
生成RSA服务器私钥:
openssl genrsa -out server.key 4096
输出的server.key文件就是服务器私钥,4096是密钥长度,要求不高的话用2048也可。
生成CSR:
执行命令 openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout myprivate.key -out mydomain.csr生成 CSR 文件。
其中,
- -new 指定生成一个新的CSR。
- -nodes 指定私钥文件不被加密。
- -sha256 指定摘要算法。
- -keyout 生成私钥文件。
- -newkey rsa:2048 指定私钥类型和长度。
因为sha1已经不安全,所以这里用了sha256,可能太旧的客户端(比如win98?)会不支持。
yoursite.csr就是生成的CSR,yoursite建议用你的网站名标识会比较方便识别。
然后按提示输入:
- 国家
- 省
- 市
- 公司
- 部门
- 通用名(即网站域名,这个必须准确,有些商业证书支持在这里用带www的域名后签发出同时支持不带www的域名)
- 密码(可选,设置的话以后重启webserver都需要输入密码)
自签名证书做法
1.先生成一对秘钥,把公钥做成证书 ca.key
openssl genrsa -out ca.key 2048 生成一个 2048 位的 私钥
我们可以 输出它的公钥看看 openssl rsa -in ca.key -pubout
2. 生成证书CRT server.crt
openssl req -new -x509 -key ca.key -out server.crt -days 365
国家 Country Name: CN
省 Stat or Province Name Shanghai
市 Locality Name Shanghai
公司 Organization Name : HUPU
部门 Organizational Unit Tech
主机名 Common Name www.zmz8.com
邮件 Email Address 279861795@qq.com
我们可以查看证书内容 openssl x509 -text -in server.crt
3.配置nginx
证书路径 /usr/local/nginx/private_ca/server.crt
私钥路径 /usr/local/nginx/private_ca/ca.key
nginx添加配置
server {
listen 443;
server_name www.zmz8.com;
ssl on;
ssl_certificate ../private_ca/server.crt;
ssl_certificate_key ../private_ca/ca.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
最后如果可以的话 ,可以配置一个服务器签署
openssl req -new -out server.csr -key server.key -config /etc/pki/tls/openssl.cnf
商业证书生成
首先找一个商业证书机构(CA)或其代理商下一个证书订单。
其次是选择证书类型。
证书类型
商业证书有很多类型,也有很多的CA可以选择,不同的CA,不同的类型价格也不一样。
常见的CA有:
- VeriSign(Symantec)
- GeoTrust(RapidSSL)
- Comodo
- ……
以上以价格从高到低排序。除此之外当然还有很多,具体可以打开你的系统证书列表看看。
需要特别说一句的就是:臭名昭著的CNNIC和沃通(WoSign,包括免费的StartSSL),已经被证明不安全,建议将它们从系统中删除,并且不要去申请使用它们的证书。
常见的证书类型有三种:
- DV(域名验证)
- OV(组织验证)
- EV(扩展验证)
验证级别从低到高排序,价格也是如此。
DV证书只验证域名,在最终访问者那边查看证书时将不会包含CSR中的组织信息,只有域名信息,也就是说你就算是在CSR里输入你是GOOGLE,到了客户端那里也是看不到的。
OV证书除了验证域名还需要验证组织,即你需要提供证据证明你在CSR里输入的公司或组织的确是你, 这样才能在客户端证书里查看到你的组织信息。
EV证书就要求更高了,通常是金融机构之类的用。
除此之外,证书还有一种区别:
- 单域名证书
- 多域名证书
- 泛域名证书
一样是价格从高到低排序。
单域名证书就是只能用于一个域名的证书,某些商业证书可以提供两个域名:带WWW的和不带WWW的。
多域名证书就是一个证书可以用于多个域名,默认支持三个域名,当然增加域名需要加钱,但比单独买单域名证书要便宜。适用于一个公司有多个域名,而且多个域名部署在一个服务器上,使用一个证书会比较省事,也比较便宜。
泛域名证书就是一个证书可以用于一个域名下的任意多个子域名。
申请流程
一般申请流程(仅指DV类型)如下:
- 选择CA或代理商
- 选择证书类型
- 选择有效期(以年为单位,一般时间越长单价越便宜)
- 下单付款
- 成交后按服务商的邮件或文档开始验证域名(以下为一种流程,不同服务商可能不太一样)
- 上传CSR(或用服务商提供的工具生成,但不推荐)
- 选择验证方式(EMAIL,文件,DNS等)
- 按相应方式操作
- 等待验证
- 取得证书(邮件或从服务商处自行下载)
其中各验证方式大致如下:
- Email:证书机构向域名注册邮箱或域名的webmaster等邮箱(可选)发送验证邮件
- 文件:在域名的指定路径下放验证文件供证书机构访问
- DNS:创建指定的DNS TXT记录供证书机构验证
通过验证后即可获得证书。
证书内容一般包括:域名的CRT,证书机构的CRT链(可能有多个),根证书CRT(CA的证书),如果用服务商的工具生成CSR,还应该会有CSR和KEY。