本帖最后由 izsc 于 2016-11-1 18:33 编辑
抱歉 发了帖子却不能删帖。。。 这篇文章暂时搁在这里 因为楼主也是初学者 本文并没有从根本上解决问题 我还在研究 所以请不要再读下去了
(环境:Ubuntu16.04 LTS) 请先粗略看过本文红字部分
1.openssl官网下载源码
cd /tmp *我放在tmp下
tar -zxf xxx *源码包名称
cd xxx *解压后文件夹名称
./config
make
(make test ) make install
cd /usr/local/ssl
ps:CA.pl于misc下 openssl.cnf于本目录下
2.创建工作文档 *我的是/home/a1213/server
放入openssl.cnf 以及CA.pl
新建index.txt serial
serial写入01
mkdir demoCA
cd demoCA
新建index.txt serial
serial打入01 保存
在demoCA下执行 touch ./{serial,index.txt} (不明白这句有什么作用 但我用了这句后解决了一些错误)
------------------------
证书文件生成:
一.服务器端
1.生成服务器端的私钥(key文件);
openssl genrsa -des3 -out server.key 1024
运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令:
openssl rsa -in server.key -out server.key
2.生成服务器端证书签名请求文件(csr文件);
openssl req -new -key server.key -out server.csr
生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其 提示一步一步输入要求的个人信息即可(如:Country,province,city,company等).
(此处Common Name必须打192.168.1.1也就是你路由器的IP 下同 每次的Common Name中都是填这个)(这些填的内容可能都要保持一致 没有测试过)
二.客户端
1.对客户端也作同样的命令生成key及csr文件;
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
三.生成CA证书文件
server.csr与client.csr文件必须有CA的签名才可形成证书.
1.首先生成CA的key文件:
openssl genrsa -des3 -out ca.key 1024
2.生成CA自签名证书:
openssl req -new -x509 -key ca.key -out ca.crt
可以加证书过期时间选项 "-days 365".
四.利用CA证书进行签名
用生成的CA证书为server.csr,client.csr签名
1.ca.pl -newca, 在提示输入已有的证书文件时,输入上面已生成的ca.crt证书文件;
2.生成服务端证书文件
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
3.生成客户端证书文件
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
ps:可能客户端证书生成做的是无用功 把服务端的转成pfx也能行 因为上面信息填的全是一样的 可以尝试跳过二
直接用最后生成的01.pem转换成pfx
--------------------------------------
进行生成客户端证书文件 TXT_DB error number 2
原因:This thing happens when certificates share common data. You cannot have two certificates that look otherwise the same. 解决办法:
方法一:
修改demoCA下 index.txt.attr
- unique_subject = yes
- unique_subject = no
方法二:
删除demoCA下的index.txt,并再touch下 (问题用这个方法解决了)
- rm index.txt
- touch index.txt
-------------------------------
最后 在/home/a1213/server(我的工作目录)/demoCA/newcerts中有01.pem(这个不用拷贝) 02.pem(client签名生成的) 拷贝至/server 下
执行 openssl pkcs12 -export -in 02.pem -inkey client.key -out client.pfx
client使用的文件有:ca.crt,client.crt,client.key,client.pfx
server使用的文件有:ca.crt,server.crt,server.key
服务端:
把server.key和server.crt重命名为uhttpd.key 和uhttpd.crt
替换/etc/下的同名文件
ssh中执行 /etc/init.d/uhttpd restart
客户端:
根证书ca.crt和客户证书client.crt(client.pfx)安装到客户端, ca.crt安装到信任的机构,client.crt(这里我用client.pfx导入 而并未导入client.crt)直接在windows安装或安装到个人证书位置( 以下步骤没做 依然可行)然后用IP访问HTTP和https服务器。在IE中我们一般导入client.pfx证书,导入时会提示上面设置的密码。
下面是最后的效果图: 感觉用了https有点降速了 我这么个搞法还是因为强迫症 对速度有要求的完全可以走http
最后是做完后生成的所有文件 我一并上传了
由于是第一次发这种文章 描述上会有些问题 请原谅
|