背景:
Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示。但有意思的是Google.com目前使用的也是SHA-1签名的证书,但证书将在3个月内过期,Google将从2015年起使用SHA-2签名的证书。SHA-1算法目前尚未发现严重的弱点,但伪造证书所需费用正越来越低。
到目前为止,google已经全面的开始仅支持sha-2的证书了,如果您的网站证书还是sha-1,那么chrome就会出现:
只有您的网站的证书使用的是sha-2类型签名算法,如sha256,那么chome就会出现:
提示:
SHA (全称Secure Hash Algorithm) 译作安全散列算法,是一种能将任意长度的消息映射成一个固定长度散列值(又称消息摘要)的算法。SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后四者有时并称为SHA-2。
SHA-1在许多安全协议中广泛使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec。在2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,如今SHA-1的安全性如今被密码学家严重质疑,希望由安全强度更高的SHA-2替代它。
今天,我们就来实现升级自签证书到sha-2
#环境
[root@bacula_server html]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@bacula_server html]# uname -r
2.6.32-573.el6.x86_64
[root@bacula_server html]# rpm -qa|grep openssl
openssl-1.0.1e-42.el6.x86_64
openssl-devel-1.0.1e-42.el6.x86_64
[root@bacula_server conf]# /application/nginx/sbin/nginx -v
nginx version: nginx/1.9.14
建立自签名CA以及如何给自己发SSL证书
我们需要一个自签名CA,然后用这个自签名CA给自己签证书。
已经安装了opessl,进入/etc/pki/CA目录进行下面的操作
一,先来看一下服务器如何生成证书请求文件
1)首先建立一个RSA密钥:
openssl genrsa -out server.key 2048
2)然后生成证书请求文件:
openssl req -new -out server.req -key server.key -subj “/C=CN/ST=Shanghai/L=Pudong/O=Namido/CN=t365.com”
其中subj的每一项都由/开头。CN的值就是希望申请可用的域名了。当然,-subj可以省略,这样就会进入交互模式,按照提示输入内容即可。
这两步做完之后,当前目录里面应该已经生成了server.key和server.req两个文件,其中.key就是我们的服务器私钥,.req是证书请求文件,如果是正常的申请步骤,下面就是把这个server.req文件拿给CA去签证书。
?
二,既然是自签证书,我们今天是自己来做一个CA。
1)再来建立一个RSA密钥:
openssl genrsa -out ca.key 2048
这个RSA密钥用作CA的私钥,一会CA用这个私钥来签证书
2)先给自己签名一个根证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -sha256 -subj “/C=CN/ST=Shanghai/L=Pudong/O=Namido/CN=Namido CA”
注意此处subj的CN值,填的是CA的名字。
然后注意-sha256选项,必须加上这个选项才能使用sha256做证书加密。默认是用sha1加密的,而sha1现在已经不够安全了。
3)有了这个根证书以后,下面开始给前面我们生成的服务器证书请求文件签发证书。
openssl x509 -req -in server.req -out server.crt -CAkey ca.key -CA ca.crt -days 3650 -sha256 -CAcreateserial -CAserial serial
成功运行后,目录中会生成server.crt。这就是由我们刚才自签名的CA生成的证书了
接下来把ca.crt、server.crt、server.key复制到HTTPS服务器上,并设置server.crt为服务器证书,server.key为服务器私钥文件。因为我们上级证书就是根证书了。所以把证书链文件直接设置成ca.crt。同时把ca.crt复制到本地。
双击下载下来的ca.crt,打开证书导入向导,将此证书加入“受信任的根证书颁发机构”即可。
做完了这么多,重启nginx服务器,然后再输入https://t365.com。终于看到久违的小绿锁了。
nginx的ssl配置:
[codesyntax lang=”text”]
server { listen 443 ssl; server_name? t365.com; ssl_certificate/application/nginx-1.9.14/ssl/server.crt; ssl_certificate_key /application/nginx-1.9.14/ssl/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cacheshared:SSL:1m; ssl_session_timeout 5m; location / { root html; index index.html index.htm;
[/codesyntax]
如何升级自签证书到sha-2,以便chrome支持?