私有CA及https

说明

x509.3证书格式

  • 证书格式的版本号
  • 证书序列号
  • 证书签名算法
  • 证书颁发者
  • 有效期
  • 持有者的名称
  • 持有者的公钥
  • CA的ID
  • 持有者的ID
  • 其他扩展信息
    • 基本约束
    • 证书策略
    • 密钥的使用限制
  • CA签名

SSL握手要完成的工作

SSL会话基于 IP 地址进行,不支持在基于主机名的虚拟主机上实现

  • 交换协议版本号
  • 选择一个双方都支持的加密方式
  • 对两端实现身份验证
  • 密钥交换

客户端验证服务器端证书

  • 日期检查:证书是否在有效期内
  • 证书颁发者的可信度
  • 证书的签名检测
  • 持有者的身份检测

配置私有CA服务器

修改ca默认项配置

1
vim /etc/pki/tls/openssl.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN # 默认国家设置为CN
countryName_min = 2
countryName_max = 2

stateOrProvinceName = State or Province Name (full name)
#stateOrProvinceName_default = Default Province
stateOrProvinceName_default = BEIJING # 默认省、州设置为BEIJING

localityName = Locality Name (eg, city)
localityName_default = chaoyang # 默认城市设置为朝阳

0.organizationName = Organization Name (eg, company)
0.organizationName_default = Nettest # 默认公司名称

organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = NetworkOpertion # 默认部门名称设为网络运维部
#organizationalUnitName_default =

commonName = Common Name (eg, your name or your server\'s hostname)
# 申请证书的主服务器名称
commonName_max = 64

emailAddress = Email Address # 证书管理员邮箱地址

创建私有 CA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd /etc/pki/CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048)
# 生成CA的私钥

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
# 创建 CA 自签署证书

mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
# 创建所需目录

touch index.txt serial
# 创建所需文件

echo 01 > serial
# 写入序列号

https 的实现

安装 mod_ssl 模块,httpd 基于 mod_ssl 模块实现对 ssl 的支持

1
yum -y install mod_ssl

创建目录,存放密钥文件和证书请求文件、证书

1
mkdir -pv /etc/httpd/conf/ssl

生成私钥

1
2
cd /etc/httpd/conf/ssl
(umask 077; openssl genrsa -out httpd.key 1024)

web server 生成证书申请

1
2
3
cd /etc/httpd/conf/ssl
openssl req -new -key httpd.key -out httpd.csr
# 生成一个证书颁发请求并填写相关信息

CA证书签署

1
2
3
4
openssl ca -in httpd.csr -out httpd.crt -days 3655
# 将web服务器的申请证书发送给私有CA服务器
# 私有CA服务器盖章,并发送给web服务器
# 这里CA服务器和web服务器为同一台

修改httpd的ssl配置

1
vim /etc/httpd/conf.d/ssl.conf
1
2
3
4
DocumentRoot "/var/www/html"
ServerName www.test.com:443
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key

配置检查并重启服务

1
2
httpd -t
systemctl restart httpd

导入 CA 证书测试,证书路径:/etc/pki/CA/cacert.pem

  • Windows 测试:拷贝证书至 Windows 环境,后缀名改为 crt 导入即可
  • Linux 测试: openssl s_client -connet:验证的地址:端口 -CAfile:CA证书的路径
1
openssl s_client -connect www.test.com:443 -CAfile /etc/pki/CA/cacert.pem
有钱任性,请我吃包辣条
0%