工具:

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的域名)
  • email
  • 密码(可选,设置的话以后重启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


我们可以查看证书内容 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;

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。