一. CA自籤web
1.創建 CA 目錄結構算法
mkdir -p ./demoCA/{private,newcerts}apache
touch ./demoCA/index.txt瀏覽器
echo 01 > ./demoCA/serial安全
# 生成 CA 的 RSA 密鑰對服務器
openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048測試
# 生成 CA 證書請求ui
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
5、ssl連接測試
openssl s_client -connect 10.12.22:443 -showcerts -state -CAfile CA.crt可使用這個的命令來查看ssl通訊的過程