工具:



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



邮件 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。