生成根证书CA及签发子证书及配置站点实践

栏目: 服务器 · 发布时间: 6年前

内容简介:需要安装 openssl。具体安装方法见:这里用的ubuntu16.04,自带的。这样操作这后文件会生成这8个文件

需要安装 openssl。具体安装方法见: https://www.openssl.org/source/

这里用的ubuntu16.04,自带的。

ff@xx:~$ openssl version
OpenSSL 1.0.2g  1 Mar 2016

实践过程

# 生成ca密钥
openssl genrsa -out ca.key 2048
# 生成CA证书
openssl req -x509 -new -nodes -key ca.key -subj "/CN=FENG" -days 365 -out ca.crt
# 把ca导出成p12格式,
openssl pkcs12 -export -clcerts -in ./ca.crt -inkey ca.key -out ca.p12

# 指定p12密码的方法
# openssl pkcs12 -export -clcerts -in ./ca.crt -inkey ca.key -out ca.p12 -password pass:123123
# 生成站点证书密钥
openssl genrsa -out server.key 2048
# 生成签发申请文件(csr文件)
openssl req -new -key server.key -subj "/CN=yy.xx.com" -out server.csr
# 用CA对上面生成的证书信息进行签名
openssl x509 -req -days 30 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
# 把服务器的证书导出成p12格式
openssl pkcs12 -export -clcerts -in ./server.crt -inkey server.key -out server.p12

# 指定密码
# openssl pkcs12 -export -clcerts -in ./server.crt -inkey server.key -out server.p12 -password pass:123123

这样操作这后文件会生成这8个文件

ca.crt
ca.key
ca.p12
ca.srl
server.crt
server.csr
server.key
server.p12
  • .key 为私钥文件,以 RSA PRIVATE KEY 开始和结束,也可能是 .pem 后缀
  • .csr 为签发申请文件,包含的申请人的一些基本信息,以 CERTIFICATE REQUEST 开始和结束
  • .crt 为证书文件,是通过密钥和基本信息加密生成的,以 CERTIFICATE 开始的结束,也可能有别的后缀,如 .cer
  • .p12 为把证书与中间证书及私钥加密放在一个文件中,为二进制文件
  • 其中 .csr 文件可以用 CSR文件在线生成工具 来生成
  • 关于文件格式的说明详细的可以看 格式说明 这篇

实际应用

现在已有站点 yy.xx.comserver.crt (证书文件), server.key (私钥文件)。

于是可以在nginx上配置 yy.xx.com 的https访问了。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yy.xx.com;
    ssl_certificate /dir/server.crt;
    ssl_certificate_key /dir/server.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;

root /tmp/nginx/;

}

crul 验证

配置好之后运行

curl -v https://yy.xx.com

发现报错 unable to get local issuer certificate

* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, Client hello (1):
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

``` 

正常的,因为生成的CA证书明显在不curl默认的根证书列表中的。

所以需要指定根证书,如下

curl -v –cacert ca.crt https://yy.xx.com

运行结果会握手成功
  • TLSv1.2 (IN), TLS handshake, Finished (20):
  • SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
  • ALPN, server accepted to use h2
  • Server certificate:
  • subject: CN=yy.xx.com
    ```

浏览器验证

用浏览器(以chrome为例)直接访问

会现 NET::ERR_CERT_INVALID 这样的错误

也是正常的,也是因为生成根证书并不在计算机中。

现在把根证书导入到计算机中。

把crt文件拷贝到计算机中,打开,安装证书,进入证书导入向导。

第二步中(证书存储)中要选第二项,点浏览,选受信任的根证书颁发机构这一项。

最后会有一个安全警告,选是就可以了。

结果:

IE上,https访问未报错误。

chrome,换一个提示,提示 NET::ERR_CERT_COMMON_NAME_INVALID

查了下,参见 主题备用名称缺失

Chrome 58 及以上版本只会使用 subjectAlternativeName 扩展程序(而不是 commonName)来匹配域名和网站证书。主题备用名称可以是域名,也可以是 IP 地址。如果证书没有正确的 subjectAlternativeName 扩展程序,系统就会向用户发送 NET::ERR_CERT_COMMON_NAME_INVALID 错误消息,告知他们连接并非处于私密状态。如果证书缺少 subjectAlternativeName 扩展程序,系统就会在 Chrome DevTools 的“安全”面板中显示警告,告知用户主题备用名称缺失。

简单来说就是签名证书的缺参数。因为这本来也是试验,这部分参书未继续探究。

参考


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计、分析与实现

算法设计、分析与实现

徐子珊 / 2012-10 / 65.00元

《算法设计、分析与实现:c、c++和java》由徐子珊编著,第1章~第6章按算法设计技巧分成渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法。每章针对一些经典问题给出解决问题的算法,并分析算法的时间复杂度。这样对于初学者来说,按照算法的设计方法划分,算法思想的阐述比较集中,有利于快速入门理解算法的精髓所在。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以结合已......一起来看看 《算法设计、分析与实现》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具