// 1牡属、準(zhǔn)備工作
// 先在隨便一個(gè)目錄吵血,創(chuàng)建以下幾個(gè)子目錄:
// private
// certificates
// 創(chuàng)建CA私鑰,提示輸入密碼:123456
openssl genrsa -aes256 -out private/ca.key.pem 2048
// 創(chuàng)建CA簽名請(qǐng)求,生成的簽名請(qǐng)求文件谎替,是ca.csr,記得要把CN *.myhost改成自己服務(wù)器的域名,以下myhost所有都要改 ,提示輸入密碼:123456
openssl req -new -key private/ca.key.pem -out private/ca.csr
Country Name : CN
State or Province Name :你的省份
Locality Name : 你的城市
Organization Name : nn 單位
Organizational Unit Name :部門(mén)
Common Name : 你的域名:例如192.168.1.122
Email Address : 你的郵箱
A challenge password : 123456
An optional company name : 你的公司名稱(chēng)
- Enter pass phrase for app.key: 123456
// 自己簽發(fā)CA根證書(shū),提示輸入密碼:123456
// 生成的ca.cer,就是最終的根證書(shū)了蹋辅!這個(gè)文件非常重要钱贯,因?yàn)楹罄m(xù)的服務(wù)端證書(shū)、客戶(hù)端證書(shū)侦另,都是用這個(gè)CA簽發(fā)的秩命,也要把它分發(fā)給客戶(hù),讓他們導(dǎo)入到自己的瀏覽器或者系統(tǒng)中
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer
// 把根證書(shū)從PEM編碼轉(zhuǎn)為PKCS編碼 提示輸入密碼:123456
// 這步其實(shí)不是必選的褒傅,但是前面說(shuō)過(guò)弃锐,JAVA環(huán)境是不能直接用PEM編碼的證書(shū)的,很多瀏覽器也不行殿托,所以有時(shí)候也需要轉(zhuǎn)一下編碼
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12
// 創(chuàng)建服務(wù)端私鑰 提示輸入密碼:123456
openssl genrsa -aes256 -out private/server.key.pem 2048
// 創(chuàng)建服務(wù)端證書(shū)簽發(fā)請(qǐng)求
// 和ca.csr的區(qū)別在于霹菊,這里的CN不是*.myhost.com,而是www.myhost.com支竹,因?yàn)槲椰F(xiàn)在是在為www.myhost.com申請(qǐng)證書(shū)
openssl req -new -key private/server.key.pem -out private/server.csr
Country Name : CN
State or Province Name :你的省份
Locality Name : 你的城市
Organization Name : nn 單位
Organizational Unit Name :部門(mén)
Common Name : 你的域名:例如192.168.1.122
Email Address : 你的郵箱
A challenge password : 123456
An optional company name : 你的公司名稱(chēng)
- Enter pass phrase for app.key: 123456
// 利用CA根證書(shū)旋廷,簽發(fā)服務(wù)端證書(shū) 提示輸入密碼:123456
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer
//測(cè)試單向認(rèn)證
//把server.key.pem和server.cer拷貝到服務(wù)器配置目錄下例如:/usr/local/etc/apache2/2.4/extra/ssl/certificates/鸠按,然后重新啟動(dòng)httpd,會(huì)要求輸入一個(gè)密碼
// 雙向認(rèn)證
// 創(chuàng)建客戶(hù)端私鑰,提示輸入密碼:123456
openssl genrsa -aes256 -out private/client.key.pem 2048
// 創(chuàng)建客戶(hù)端證書(shū)簽發(fā)請(qǐng)求
openssl req -new -key private/client.key.pem -out private/client.csr
Country Name : CN
State or Province Name :你的省份
Locality Name : 你的城市
Organization Name : 你的單位
Organizational Unit Name :部門(mén)
Common Name : 你的域名:例如192.168.1.122
Email Address : 你的郵箱
A challenge password : 123456
An optional company name : 你的公司名稱(chēng)
- Enter pass phrase for app.key: 123456
// 用CA根證書(shū)饶碘,簽發(fā)客戶(hù)端證書(shū)
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/client.csr -out certificates/client.cer
// 把客戶(hù)端證書(shū)轉(zhuǎn)換成p12格式
openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12
// ----------------------------------------------------------------------------------------------------
// iOS不識(shí)別server.cer,所以要把server.cer轉(zhuǎn)換編碼格式為der編碼
openssl x509 -in server.cer -out server_client.cer -outform der
// httpd-ssl添加的配置
SSLCertificateFile "/usr/local/etc/apache2/2.4/extra/ssl/certificates/server.cer"
SSLCertificateKeyFile "/usr/local/etc/apache2/2.4/extra/ssl/private/server.key.pem"
SSLCACertificateFile "/usr/local/etc/apache2/2.4/extra/ssl/certificates/ca.cer"
SSLVerifyClient require
SSLVerifyDepth 10