如何升级自签证书到sha-2,以便chrome支持?

背景:

Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示。但有意思的是Google.com目前使用的也是SHA-1签名的证书,但证书将在3个月内过期,Google将从2015年起使用SHA-2签名的证书。SHA-1算法目前尚未发现严重的弱点,但伪造证书所需费用正越来越低。

到目前为止,google已经全面的开始仅支持sha-2的证书了,如果您的网站证书还是sha-1,那么chrome就会出现:

2016052100062520160521000526

 

只有您的网站的证书使用的是sha-2类型签名算法,如sha256,那么chome就会出现:

20160521000548

 

提示:

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.keyserver.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.crtserver.crtserver.key复制到HTTPS服务器上,并设置server.crt为服务器证书,server.key为服务器私钥文件。因为我们上级证书就是根证书了。所以把证书链文件直接设置成ca.crt。同时把ca.crt复制到本地。

双击下载下来的ca.crt,打开证书导入向导,将此证书加入“受信任的根证书颁发机构”即可。

做完了这么多,重启nginx服务器,然后再输入https://t365.com。终于看到久违的小绿锁了。

QQ20160415153623

 

nginx的ssl配置:

 

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;

 

此条目发表在Linux分类目录,贴了, , , 标签。将固定链接加入收藏夹。