Linux之CA认证
简介
CA 概述: Certificate Authority 的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书。 CA 认证的流程和公安局派出所颁发身份证的流程一样
认证中心功能
- 证书发放
- 证书更新
- 证书撤销
- 证书验证
CA功能
- 用户认证
- 数据不可否认性
证书认证过程
- 客户端向服务端发送请求文件
- 服务端接受客户端的请求文件确认申请者是否合法
- 服务端使用私钥将请求文件进行数据加密生成证书文件
- 将生成的证书文件传递给客户端
SSL
简介
SSL 概述: ( Secure Socket Layer) 安全套接字层,通过一种机制在互联网上提供密钥传输。其主要目标是保证两个应用间通信数据的保密性和可靠性, 可在服务器端和用户端同时支持的一种加密算法。目前主流版本 SSLV2、 SSLV3( 常用)。
SSL传输过程
- 客户端请求一个安全会话协商加密算法
- 服务端向客户端发送证书
- 客户端接受服务端的证书确认是否为自己想要访问的网站
- 确认是客户端访问的网站 客户端会使用CA证书的公钥解密目标网站的证书 从而得到目标网站的公钥
- 客户端使用对称加密算法生成一把秘钥 然后使用目标网站的公钥对秘钥进行加密 传递给目标网站
- 目标网站使用私钥解密客户端传递的公钥 从而得到对称机密的秘钥 通过该秘钥进行数据安全传输
CA配置
安装
# 安装
[root@server ~]# yum -y install openssl
# 修改配置
[root@server ~]# vim /etc/pki/tls/openssl.cnf
basicConstraints=CA:FALSE ---> basicConstraints=CA:TRUE
证书以及私钥
# 查看帮助
[root@server ~]# /etc/pki/tls/misc/CA -h
usage: /etc/pki/tls/misc/CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify
newcert:新证书
newreq:新请求
newreq-nodes:新的请求节点
newca:新的CA证书
sign:签证
verify:验证
# 生成CA证书
[root@server ~]# /etc/pki/tls/misc/CA -newca
# 查看公钥证书
[root@server ~]# cat /etc/pki/CA/cacert.pem
# 查看证书私钥
[root@server ~]# cat /etc/pki/CA/private/cakey.pem
在Apache搭建https
配置思路
- 生成请求文件发送给服务端
- 服务端接受请求文件使用私钥加密生成证书文件
- 将证书文件传递给客户端
- 客户端接受证书文件与http进行结合
私钥以及请求文件配置
# 安装http
[root@client ~]# yum -y install httpd
# 生成证书请求私钥
# 由私钥推测服务端的公钥 但是不能由公钥推测出私钥
[root@client ~]# openssl genrsa -des3 -out /etc/httpd/conf.d/server.key # 使用des3算法 将私钥输出到/etc/httpd/conf.d/server.key
# 查看私钥
[root@client ~]# cat /etc/httpd/conf.d/server.key
# 使用私钥生成请求文件
[root@client ~]# openssl req -new -key /etc/httpd/conf.d/server.key -out /server.csr
# 查看请求文件
[root@client ~]# cat /server.csr
# 将证书传递给服务端
[root@client ~]# scp /server.csr 10.1.1.1:/
# 服务端进行验签
[root@server ~]# openssl ca -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -in /tmp/server.csr -out /server.crt # 使用生成的私钥以及正式进行验证签名
# 将签名证书传递给客户端
[root@server ~]# scp /server.crt 10.1.1.2:/tmp
Apache联动SSL
# 安装ssl模块
[root@client ~]# yum -y install mod_ssl
# 配置apache加载证书文件
[root@client ~]# cp /server.crt /etc/httpd/conf.d/ # 将证书复制到改目录下
# 修改配置文件
[root@client ~]# vim /etc/httpd/conf.d/ssl.conf
# 修改证书以及私钥的路径
SSLCertificateFile /etc/pki/tls/certs/localhost.crt ---> SSLCertificateFile /etc/httpd/conf.d/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ---> SSLCertificateKeyFile /etc/httpd/conf.d/server.key
# 重复服务
[root@client ~]# systemctl restart httpd
# 查看服务是否启动
[root@client ~]# netstat -aunpt | grep httpd
服务测试
[root@client ~]# vim /var/www/html/index.html
Welcome to Apache over SSL
在Nginx搭建https
安装nginx
# 创建yum源
[root@client ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1
# 安装
[root@client ~]# yum -y install nginx
# 启动
[root@client ~]# systemctl start nginx
修改配置文件
# 备份配置文件
[root@client ~]# cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
# 添加虚拟主机
[root@client ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 443 ssl;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 版本
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; # 加密方式
ssl_certificate /etc/httpd/conf.d/server.crt; #签名
ssl_certificate_key /etc/httpd/conf.d/server.key; # 私钥
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m
}
# 检测主机
[root@client ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 重启nginx
[root@client html]# systemctl stop nginx
[root@client html]# nginx
[root@client html]# netstat -aunpt | grep nginx
测试
[root@client html]# echo "Welcome to Nginx over SSL" > /usr/share/nginx/html/index.html