自制ca证书,nginx配置https访问

CA:证书颁发机构。有受信任的第三方颁发机构,也有个人的。但是自己充当颁发机构的话是不受浏览器信任的。
CA证书:由CA机构颁发的证书,相当于盖公章。是由颁发机构的私钥给需要证书方的公钥加密生成。
这里需要两个密钥对,一个颁发方,一个是请求证书方。
颁发证书过程:
1.请求方假定叫a事先生成密钥对,也可以是颁发机构假定叫b代为生成。有了密钥对之后,请求方a保管好私钥,将公钥给机构b,因为需要b给它的公钥加上数字认证,也就是生成证书。
2.机构b对a的身份进行确认,自制的话不用,比如电话核实或者邮件核实是否是a提交的公钥。
3.b确认后,就用自己的私钥对a的公钥添加数字签名,就生成了ca证书。之后a就用b颁发的ca证书可以使用ssl协议进行加密传输网络数据。

加入这时c去对a进行访问,c得到a的数字证书后,就先用b的公钥对数字签名进行验证,如果核实就得到了a的公钥,c就用a的公钥加密需要发送的消息,a得到后用私钥解密即可。之后a和c协商生成对话密钥,之后就用对话密钥互相传输消息,关于对话密钥的生成可以查看ssl协议机制。

这里为啥需要是受信任的第三方的机构呢?一句话:只要机构的数字证书可信,那么里面的公钥也就可信。想象一个场景:你的报文在传输过程中被其他人截获,别人也可以制作出和你一样的数字证书出来,里面放的是他的公钥,那么他就可以再截获报文用自己的私钥解密,就可以得到你传输的消息内容。

自制ca证书

环境说明:
两台centos7,当然也可以用一台:
服务端:192.168.247.100
nginx端:192.168.247.101

服务端操作

1.安装openssl
yum install -y openssl

openssl是ssl协议的程序
查看openssl配置文件内容,里面包含证书存放路径等信息:

vim /etc/pki/tls/openssl.cnf
dir             = /etc/pki/CA  --证书存放主目录
certs           = $dir/certs   --存储签发的数字证书
database        = $dir/index.txt   --记录颁发的证书信息
serial          = $dir/serial      --证书编号
certificate     = $dir/cacert.pem  --本地自签名数字证书
private_key     = $dir/private/cakey.pem  --用于签发的私钥

在这里插入图片描述
创建证书私钥:

openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048

生成本地数字证书:

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

一次填写国家,省份,城市,公司到位名称,个人或组织名称,域名,邮箱。
在这里插入图片描述
创建两个文件:

cd /etc/pki/CA
touch index.txt
echo 01 > serial

服务端好了,nginx服务器操作:
也是先生成私钥文件,自定义文件路径:

mkdir test_ssl
cd test_ssl

openssl genrsa -out /root/test_ssl/nginx.key 2048

生成请求文件,服务器端等下用这个请求文件来生成数字证书。前面服务端其实也可以先生成请求文件再生成数字证书。

openssl req -new -key nginx.key -out nginx.csr  

--填写信息中签发的机构、省份、城市要和上面CA生成的机构一样,server name是域名

将请求文件发给服务端:

scp nginx.csr 192.168.247.100:~/

服务端操作:
给这个请求文件生成签名,生成数字证书;

openssl ca -in /root/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365
两个y即可

最后把这个数字证书发回给nginx端:

scp /etc/pki/CA/certs/nginx.crt 192.168.247.101:~/test_ssl/

数字证书两边就完成了。

nginx配置ssl

vim /usr/local/nginx/conf/vhost/default.conf
server
{
    
    
    listen 443 ssl;
    server_name b.com;
    root /data/wwwroot/default/;
    index index.php index.html index.htm;
    ssl on;
    ssl_certificate /root/test_ssl/nginx.crt;
    ssl_certificate_key /root/test_ssl/nginx.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL;
    ssl_prefer_server_ciphers on;
}

最后浏览器访问结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37369726/article/details/121824098