准备工作
-
openssl目录准备
一般情况下openssl的配置文件都在这个目录/etc/pki/tls
mkdir /etc/pki/t2cloud cd /etc/pki/t2cloud mkdir root server client newcerts echo 01 > serial echo 01 > crlnumber touch index.txt
-
openssl配置准备
修改openssl配置,
vi /etc/pki/tls/openssl.cnf
-
找到这句注释掉,替换为下面那句
#default_ca = CA_default default_ca = CA_t2cloud
-
把整个部分拷贝一份,改成上面的名字
[ CA_t2cloud ]
修改里面的如下参数,保存退出:
dir = /etc/pki/t2cloud certificate = $dir/root/ca.crt private_key = $dir/root/ca.key
-
创建CA根证书
-
生成key:
openssl genrsa -out /etc/pki/t2cloud/root/ca.key 1024 -passout pass:t2cloud@123
-
生成crt:
openssl req -x509 -new -key /etc/pki/t2cloud/root/ca.key -out /etc/pki/t2cloud/root/ca.crt -days 36500 -subj "/C=CN/ST=BJ/L=BEIJING/O=T2Cloud/OU=T2Cloud/CN=192.168.103.80" -passout pass:t2cloud@123
创建server证书
-
生成key:
openssl genrsa -out /etc/pki/t2cloud/server/server.key 1024 -passout pass:t2cloud@123
-
生成csr:
openssl req -new -key /etc/pki/t2cloud/server/server.key -out /etc/pki/t2cloud/server/server.csr -passin pass:t2cloud@123 -subj "/C=CN/ST=BJ/L=BEIJING/O=T2Cloud/OU=T2Cloud/CN=192.168.103.80"
-
生成crt:
openssl x509 -req -in /etc/pki/t2cloud/server/server.csr -CA /etc/pki/t2cloud/root/ca.crt -CAkey /etc/pki/t2cloud/root/ca.key -CAcreateserial -days 3650 -set_serial 01 -out /etc/pki/t2cloud/server/server.crt
-
合并为Haproxy使用的证书:
cat /etc/pki/t2cloud/server/server.key /etc/pki/t2cloud/server/server.crt | tee /etc/pki/t2cloud/server/server-allinone.pem
创建client证书
-
生成key:
openssl genrsa -des3 -out /etc/pki/t2cloud/client/client.key 1024 -passout pass:t2cloud@123
-
生成csr:
openssl req -new -key /etc/pki/t2cloud/client/client.key -out /etc/pki/t2cloud/client/client.csr -passin pass:t2cloud@123 -subj "/C=CN/ST=BJ/L=BEIJING/O=T2Cloud/OU=T2Cloud/CN=192.168.103.80"
-
生成crt:
openssl ca -in /etc/pki/t2cloud/client/client.csr -cert /etc/pki/t2cloud/root/ca.crt -keyfile /etc/pki/t2cloud/root/ca.key -days 3650 -out /etc/pki/t2cloud/client/client.crt
-
生成浏览器使用证书:
openssl pkcs12 -export -in /etc/pki/t2cloud/client/client.crt -inkey /etc/pki/t2cloud/client/client.key -out /etc/pki/t2cloud/client/client.p12 -passin pass:t2cloud@123 -passout pass:t2cloud@123 -name t2client
配置Haproxy
frontend web
bind 192.168.103.80:443 ssl crt /etc/pki/t2cloud/server/server-allinone.pem ca-file /etc/pki/t2cloud/root/ca.crt verify required
default_backend vue-web
backend vue-web
mode tcp
balance roundrobin
server vue-1 xxx.xxx.xxx.xxx weight 1 maxconn 1500 inter 2000 check
测试
由于是双向认证,直接通过浏览器访问https地址是被告知:
不接受您的登录证书,或者您可能没有提供登录证书。请尝试联系系统管理员。(ERR_BAD_SSL_CLIENT_AUTH_CERT)
需要在本机安装client证书。安装时会提示输入生成证书时设置的密码。安装成功后,重启浏览器输入网址访问,浏览器可能会提示你选择证书,选择刚才安装的那个证书即可。
问题
-
创建多套client证书时,报错:
openssl TXT_DB error number 2 failed to update database
有如下三种方式:
-
删除/etc/pki/tls/t2cloud下的index.txt,并再touch下
-
将 common name设置成不同的
-
将 index.txt.attr中
unique_subject = yes
改为unique_subject = no
-