这篇文章是本人在开发过程中的总结,分为4个标题;
1.安装集成环境,配置文件
phpStudy是一个PHP调试环境的程序集成包
该程序包集成最新的Apache+PHP+MySQL+NIGINX+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了数据库、开发工具、开发手册等.。同时phpStudy还自带有openssl工具(我们证书生成所要用到的);
下载地址:http://phpstudy.php.cn/
本人用过8版本,没有旧版本本地认证证书方便,所以这篇主要记录旧版本phpstudy;
下载2018版本,正常启动客户端
默认的服务器是php+apache,在这我选择了用nginx服务器:切换为php5.6+Nginx
服务器切换完毕之后,打开vhosts文件,更改配置文件
根据自己的路径配置
server {
listen 443 ssl; #http的端口号是80,https的端口为443
server_name www.test.com #服务器域名 配置多个时不要添加;号即可,
ServerName 127.0.0.1
ServerName 192.168.1.107; #本机电脑的ip地址
ssl on; #开启ssl
ssl_certificate C:\Users\Administrator\Desktop\新建文件夹(2)\server.cer; #服务器证书文件
ssl_certificate_key C:\Users\Administrator\Desktop\新建文件夹(2)\server.key; #服务器证书密匙
ssl_client_certificate C:\Users\Administrator\Desktop\新建文件夹(2)\ca.cer; #根证书
ssl_verify_client on; #开启客户端验证
location / {
root F:\PHPStudy\PHPTutorial\WWW; #本地网站文件目录
index index.HTML index.html index.htm ;
}
}
到这已经配置完成,重启phpStudy;
2.生成证书
ssl证书生成一般可以通过2种工具:java环境下的keytool和openssl,个人感觉openssl比较好用,看个人习惯,下面以单独下载openssl举例;单独下载openssl的话需要配置环境,这点可以自行百度进行配置!
现在开始生成证书,因为刚才配置的证书路径在桌面的证书文件夹中,所以在桌面创建一个空的证书文件夹;
win系统下新建一个文件夹用系统管理员打开windows.powershell界面:
开始正式生成证书:
1.CA私钥: ca.key
openssl genrsa -out ca.key 1024
2.创建根证书请求文件ca.csr
openssl req -new -out ca.csr -key ca.key
这里需要填入配置信息:
Country Name (2 letter code) [AU]:cn 国家名(2个字母的代号)
State or Province Name (full name) [Some-State]: sx 省
Locality Name (eg, city) []:xa 市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xx 公司名
Organizational Unit Name (eg, section) []:xx 组织或部门名
Common Name (eg, YOUR name) []:test.com 域名(尽量用服务器域名,不然会引起服务器警告)
Email Address []: 邮箱地址(不填直接回车)
A challenge password []:123456 密码
An optional company name []:xx 公司名
3.自签根证书ca.cer
openssl x509 -req -in ca.csr -out ca.cer -signkey ca.key -CAcreateserial -days 3650
4.生成p12格式根证书ca.p12(密码填写123456,之前ca.csr的密码,ps:这里输入的时候是不可见的输入完成后回车即可)
openssl pkcs12 -export -clcerts -in ca.cer -inkey ca.key -out ca.p12
5.生成服务端key server.key,这个需要phpstudy安装目录下找到apache的bin
F:\PHPStudy\PHPTutorial\Apache\bin\openssl genrsa -out server.key 1024
6.生成服务端请求文件 server.csr
openssl req -new -out server.csr -key server.key
填入证书配置信息:
Country Name (2 letter code) [AU]:cn 国家名(2个字母的代号)
State or Province Name (full name) [Some-State]:sx 省
Locality Name (eg, city) []:xa 市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx 公司名
Organizational Unit Name (eg, section) []:xxx 组织或部门名
Common Name (eg, YOUR name) []:test.com 域名(尽量用服务器域名,不然会引起服务器警告)
Email Address []: 邮箱地址
A challenge password []:123456 密码
An optional company name []:xx 公司名
7.生成服务端证书server.cer(ca.cer,ca.key,servr.key,server.csr这4个生成服务端证书):
openssl x509 -req -in server.csr -out server.cer -signkey server.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650
8.生成客户端key client.key:
openssl genrsa -out client.key 1024
9.生成客户端请求文件client.csr:
openssl req -new -out client.csr -key client.key
填入证书配置信息:
Country Name (2 letter code) [AU]:cn 国家名(2个字母的代号)
State or Province Name (full name) [Some-State]:sx 省
Locality Name (eg, city) []:xa 市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx 公司名
Organizational Unit Name (eg, section) []:xxx 组织或部门名
Common Name (eg, YOUR name) []:ty1 签发机构\开发者人员(这里随意)
Email Address []: 邮箱地址
A challenge password []:123456 密码
An optional company name []:xxx 公司名
10.生成客户端证书 client.cer:
openssl x509 -req -in client.csr -out client.cer -signkey client.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650
11.生成客户端p12格式根证书client.p12(密码设置123456):
openssl pkcs12 -export -clcerts -in client.cer -inkey client.key -out client.p12
至此,证书就制作完毕了:这个是新建文件夹里面的东西
3.完成之后测试部分
以本地服务器为例(我的本地域名配置的是www.test.com):
浏览器打开浏览器输入https://www.test.com/出现下面的界面,这是现在还没有导入证书服务器拒绝访问:
打开浏览器设置-高级-管理证书-导入-下一步-浏览(选择证书路劲,选中client.p12,文件类型那里改为全部类型就可以看到p12文件了)-输入p12证书密码-下一步一直至完成即可-导入完成后重启浏览器-输入https://www.test.com/-弹出证书导入弹窗选择确定-正常访问目标网页!
到此已经完成http转https双向认证证书完成;
4.注意:
如果需要真实应用场景我们需要在CA机构颁发证书,当我们将http转为https时,请求所有资源也必须为https,不然会安全阻塞,例:前后端分离的情况下,必须将WebAPI接口也转换为https协议;当然,还有其他办法,具体的资料也有不少,这是本人自己开发过程中遇到的,分享给大家。
补充:本文章方法其实可以适用所有的https搭建,只不过我是为了方便在phpstudy搭建,tomcat等其实方法都差不多,有不足地方请指教!!!