// 1、准备工作
// 先在随便一个目录,创建以下几个子目录:
// private
// certificates
// 创建CA私钥,提示输入密码:123456
openssl genrsa -aes256 -out private/ca.key.pem 2048
// 创建CA签名请求,生成的签名请求文件,是ca.csr,记得要把CN *.myhost改成自己服务器的域名,以下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 :部门
Common Name : 你的域名:例如192.168.1.122
Email Address : 你的邮箱
A challenge password : 123456
An optional company name : 你的公司名称
- Enter pass phrase for app.key: 123456
// 自己签发CA根证书,提示输入密码:123456
// 生成的ca.cer,就是最终的根证书了!这个文件非常重要,因为后续的服务端证书、客户端证书,都是用这个CA签发的,也要把它分发给客户,让他们导入到自己的浏览器或者系统中
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer
// 把根证书从PEM编码转为PKCS编码 提示输入密码:123456
// 这步其实不是必选的,但是前面说过,JAVA环境是不能直接用PEM编码的证书的,很多浏览器也不行,所以有时候也需要转一下编码
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12
// 创建服务端私钥 提示输入密码:123456
openssl genrsa -aes256 -out private/server.key.pem 2048
// 创建服务端证书签发请求
// 和ca.csr的区别在于,这里的CN不是*.myhost.com,而是www.myhost.com,因为我现在是在为www.myhost.com申请证书
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 :部门
Common Name : 你的域名:例如192.168.1.122
Email Address : 你的邮箱
A challenge password : 123456
An optional company name : 你的公司名称
- Enter pass phrase for app.key: 123456
// 利用CA根证书,签发服务端证书 提示输入密码: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
//测试单向认证
//把server.key.pem和server.cer拷贝到服务器配置目录下例如:/usr/local/etc/apache2/2.4/extra/ssl/certificates/,然后重新启动httpd,会要求输入一个密码
// 双向认证
// 创建客户端私钥,提示输入密码:123456
openssl genrsa -aes256 -out private/client.key.pem 2048
// 创建客户端证书签发请求
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 :部门
Common Name : 你的域名:例如192.168.1.122
Email Address : 你的邮箱
A challenge password : 123456
An optional company name : 你的公司名称
- Enter pass phrase for app.key: 123456
// 用CA根证书,签发客户端证书
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
// 把客户端证书转换成p12格式
openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12
// ----------------------------------------------------------------------------------------------------
// iOS不识别server.cer,所以要把server.cer转换编码格式为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