zoukankan      html  css  js  c++  java
  • 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的域名)
    • 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。
  • 相关阅读:
    《Redis 设计与实现》读书笔记(四)
    《Redis 设计与实现》读书笔记(三)
    《Redis 设计与实现》读书笔记(二)
    《Redis 设计与实现》读书笔记(一)
    《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)
    Python调试工具
    记一次偶发的bug排查——redis-py-cluster库的bug
    苹果支付的这些漏洞,你都堵上了吗?
    微软消息队列-MicroSoft Message Queue(MSMQ)队列的C#使用
    Quartz.net设置任务中同时最多运行一个实例 [DisallowConcurrentExecution]
  • 原文地址:https://www.cnblogs.com/gwyy/p/8469416.html
Copyright © 2011-2022 走看看