apache 搭建双向证书认证

风流意气都作罢 提交于 2020-03-02 09:36:15

一. CA自签


1.建立 CA 目录结构

mkdir -p ./demoCA/{private,newcerts}

touch ./demoCA/index.txt

echo 01 > ./demoCA/serial

# 生成 CA 的 RSA 密钥对

openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048

# 生成 CA 证书请求

openssl req -new -x509  -days 3650 -key ./demoCA/private/cakey.pem -out careq.pem

#复制一份证书

cp cacert.pem ca.crt

二.生成和签发服务器、客户端证书

#修改openssl配置文件

/etc/pki/tls/openssl.cnf

设置好

dir             = /root/ssl/demoCA (生成CA的路径)

# 生成服务器的 RSA 密钥对

openssl genrsa -des3 -out server.key

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令。

去除key文件口令的命令:

openssl rsa -in server.key -out server.key

# 生成服务器证书请求

openssl req -new -days 3650 -key server.key -out server.csr

# 使用 CA 签发服务器证书

openssl ca -in server.csr -out server.crt -days 3650

也可以直接指定好根证书的和其私钥的路径

openssl ca -in server.csr -out server.crt -cert ./demoCA/cacert.pem -keyfile ./demoCA/private/cakey.pem


*生成用户的 RSA 密钥对

openssl genrsa -des3 -out user.key

*生成用户证书请求

openssl req -new -days 3650 -key user.key -out user.csr

*使用 CA 签发用户证书

openssl ca -in user.csr -out user.crt

三.导出用户证书client.pfx供浏览器使用

openssl pkcs12 -export -clcerts -in user.cert -inkey user.key -out client.pfx


四.apache的ssl配置

ServerName free51.alipay.net

LogLevel info

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /opt/install/httpd/conf/sslcrt/server.crt

#SSLCertificateFile 指定服务器使用的证书。该指令用于指定服务器持有的X.509证书(PEM编码),其中还可以包含对应的RSA或DSA私钥。如果其中包含的私钥已经使用 密语加密,那么在 Apache启动的时候将会提示输入密语。如果服务器同时使用了RSA和DSA两种证书,那么该指令可以使用两次来分别指定两种证书的位置。

SSLCertificateKeyFile /opt/install/httpd/conf/sslcrt/server.key

#SSLCertificateKeyFile 指定了服务器私钥文件。如果SSLCertificateFile指定的服务器证书文件中不包含相应的私钥,那么就必须使用该指令,否则就不需要使用。我 们反对在服务器证书中包含私钥,正确的做法应该是将证书和私钥分开在不同的文件中。如果私钥文件已经使用密语加密,那么在Apache启动的时候将会提示 输入密语。如果服务器同时使用了RSA和DSA两种证书,那么该指令可以使用两次来分别指定两种私钥的位置。

SSLCertificateChainFile /opt/install/httpd/conf/sslcrt/ca.crt #如果有很久级证书就好好配这个。

#SSLCertificateChainFile 指定了一个多合一的CA证书:由直接签发服务器证书的CA证书开始,按证书链顺序回溯,一直到根CA的证书结束,这一系列的CA证书(PEM格式)就构成 了服务器的证书链。这个指令也可以由SSLCACertificatePath指令代替,或者两个一起使用,用于明确的创建服务器的证书链。这个证书链将 被与服务器证书一起发送给客户端。这有利于避免在执行客户端认证时多个CA证书之间出现混淆或冲突。因为虽然将服务器证书链上的某个CA证书放到 SSLCACertificatePath目录中对于证书链结构没什么影响,但是由这个CA签发的客户端证书也会在执行客户端认证的时候同时被认可,这通 常不是你期望的结果。

SSLCACertificateFile /opt/install/httpd/conf/sslcrt/ca.crt

#SSLCACertificateFile 该指令用于客户端认证。这个指令指定了一个多合一的CA证书,只有持有这些CA所签发证书的客户端才允许访问。这个所谓"多合一"证书文件其实就是将多个 PEM格式的证书按照优先级顺序放置在同一个文件中而已。这个指令也可以由SSLCACertificatePath指令代替,或者两个一起使用。

SSLVerifyClient require

#要求进行客户端认证。

SSLVerifyDepth 1

SSLOptions +StdEnvVars

五、ssl链接测试

openssl s_client -connect 10.12.22:443  -showcerts    -state   -CAfile CA.crt
可以使用这个的命令来查看ssl通信的过程


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!