如何在本地看到https的绿锁——建立自签名CA以及如何给自己发SSL证书

最近编写和调试了许多HTTPS的网站,可是本地测试的时候浏览器里的https上总是变成红色,然后打着一个巨大的斜线。那么如何在本地调试的过程中让本地HTTPS在浏览器里显示出绿锁呢?

我们需要一个自签名CA,然后用这个自签名CA给自己签证书。

嗯。。。。。。。。。。。。。。


在说怎么做之前,我们先来看一下服务器如何生成证书请求文件。

假设大家都已经装好了openssl。

首先建立一个RSA密钥:

openssl genrsa -out server.key 2048

然后生成证书请求文件:

openssl req -new -out server.req -key server.key -subj "/C=CN/ST=Shanghai/L=Pudong/O=Namido/CN=127.0.0.1"

其中subj的每一项都由/开头。CN的值就是希望申请可用的域名了。

当然,-subj可以省略,这样就会进入交互模式,按照提示输入内容即可。

这两步做完之后,当前目录里面应该已经生成了server.keyserver.req两个文件,其中.key就是我们的服务器私钥,.req是证书请求文件,如果是正常的申请步骤,下面就是把这个server.req文件拿给CA去签证书。


当然,我们今天是自己来做一个CA。

再来建立一个RSA密钥:

openssl genrsa -out ca.key 2048

这个RSA密钥用作CA的私钥,一会CA用这个私钥来签证书。

首先先给自己签名一个根证书。

openssl req -new -x509 -days 1000 -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现在已经不够安全了。

有了这个根证书以后,下面开始给前面我们生成的服务器证书请求文件签发证书。

openssl x509 -req -in server.req -out server.crt -CAkey ca.key -CA ca.crt -days 1000 -sha256\
        -CAcreateserial -CAserial server.serial

成功运行后,目录中会生成server.crt。这就是由我们刚才自签名的CA生成的证书了。

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

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

做完了这么多,重启Web服务器,然后再输入https://127.0.0.1。终于看到萌萌的小绿锁了。