内容简介:需要安装 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.com
了 server.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 的“安全”面板中显示警告,告知用户主题备用名称缺失。
简单来说就是签名证书的缺参数。因为这本来也是试验,这部分参书未继续探究。
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 创建私有CA并签发证书
- 为IP签发SSL证书
- 为IP签发SSL证书
- 本地建立CA签发数字证书
- HTTPS心得笔记之OpenSSL生成root CA及签发证书
- GDCA 误签发已停止支持的 1024bit SSL 数字证书
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法设计、分析与实现
徐子珊 / 2012-10 / 65.00元
《算法设计、分析与实现:c、c++和java》由徐子珊编著,第1章~第6章按算法设计技巧分成渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法。每章针对一些经典问题给出解决问题的算法,并分析算法的时间复杂度。这样对于初学者来说,按照算法的设计方法划分,算法思想的阐述比较集中,有利于快速入门理解算法的精髓所在。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以结合已......一起来看看 《算法设计、分析与实现》 这本书的介绍吧!