一. CA自签
Linux下先安装openssl,安装路径于/usr/local/openssl
1.#修改openssl配置文件
然后 /usr/local/openssl/ssl/misc/目录下执行命令
./CA.sh -newca (生成自己服务上的CA服务器)
命令执行后会在该目录下生成demoCA这样的目录..
/demoCA/private/cakey.pem就是CA的key文件啦,./demoCA/cacert.pem就是CA的c
rt文件了
二.生成和签发服务器、客户端证书
1.#修改openssl配置文件
/etc/pki/tls/openssl.cnf
设置好
dir = /usr/local/openssl/ssl/misc/demoCA (生成CA的路径)
然后 /usr/local/openssl/ssl/misc/目录下执行命令
./CA.sh -newca (生成自己服务上的CA服务器)
命令执行后会在该目录下生成demoCA这样的目录..
/demoCA/private/cakey.pem就是CA的key文件啦,./demoCA/cacert.pem就是CA的c
rt文件了
二.生成和签发服务器、客户端证书
# 生成服务器的 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两种证书,那么该指令可以使用两次来分别指定两种证书的位置。
加密,那么在 Apache启动的时候将会提示输入密语。如果服务器同时使用了RSA和DSA两种证书,那么该指令可以使用两次来分别指定两种证书的位置。
SSLCertificateKeyFile /opt/install/httpd/conf/sslcrt/server.key
#SSLCertificateKeyFile 指定了服务器私钥文件。如果SSLCertificateFile指定的服务器证书文件中不包含相应的私钥,那么就必须使用该指令,否则就不需要使用。我们反对在
服务器证书中包含私钥,正确的做法应该是将证书和私钥分开在不同的文件中。如果私钥文件已经使用密语加密,那么在Apache启动的时候将会提示输入密语。如果服务器同
时使用了RSA和DSA两种证书,那么该指令可以使用两次来分别指定两种私钥的位置。
服务器证书中包含私钥,正确的做法应该是将证书和私钥分开在不同的文件中。如果私钥文件已经使用密语加密,那么在Apache启动的时候将会提示输入密语。如果服务器同
时使用了RSA和DSA两种证书,那么该指令可以使用两次来分别指定两种私钥的位置。
SSLCertificateChainFile /opt/install/httpd/conf/sslcrt/ca.crt #如果有很久级证书就好好配这个。
#SSLCertificateChainFile指定了一个多合一的CA证书:由直接签发服务器证书的CA证书开始,按证书链顺序回溯,一直到根CA的证书结束,这一系列的CA证书(PEM格式)就
构成了服务器的证书链。这个指令也可以由SSLCACertificatePath指令代替,或者两个一起使用,用于明确的创建服务器的证书链。这个证书链将被与服务器证书一起发送给客
户端。这有利于避免在执行客户端认证时多个CA证书之间出现混淆或冲突。因为虽然将服务器证书链上的某个CA证书放到SSLCACertificatePath目录中对于证书链结构没什么
影响,但是由这个CA签发的客户端证书也会在执行客户端认证的时候同时被认可,这通常不是你期望的结果。
构成了服务器的证书链。这个指令也可以由SSLCACertificatePath指令代替,或者两个一起使用,用于明确的创建服务器的证书链。这个证书链将被与服务器证书一起发送给客
户端。这有利于避免在执行客户端认证时多个CA证书之间出现混淆或冲突。因为虽然将服务器证书链上的某个CA证书放到SSLCACertificatePath目录中对于证书链结构没什么
影响,但是由这个CA签发的客户端证书也会在执行客户端认证的时候同时被认可,这通常不是你期望的结果。
SSLCACertificateFile /opt/install/httpd/conf/sslcrt/ca.crt
#SSLCACertificateFile 该指令用于客户端认证。这个指令指定了一个多合一的CA证书,只有持有这些CA所签发证书的客户端才允许访问。这个所谓"多合一"证书文件其实就是
将多个PEM格式的证书按照优先级顺序放置在同一个文件中而已。这个指令也可以由SSLCACertificatePath指令代替,或者两个一起使用。
将多个PEM格式的证书按照优先级顺序放置在同一个文件中而已。这个指令也可以由SSLCACertificatePath指令代替,或者两个一起使用。
SSLVerifyClient require
#要求进行客户端认证。
SSLVerifyDepth 10