写在前面的话
1.就是一些工作tips 专门的术语是一个坑 也许以后会填
2.其实ssl协议的证书看你怎么理解了 服务器 客服端 CA认证的 或者你理解成CA认证 然后一级 二级证书这么也可以
3.我创建的思路就是用CA局认证的一级证书 再去签署二级的请求证书申请 然后创建二级证书 最后对二级的密钥进行的解密 这么干嘛为毛这么干 我记得是win32下不支持加密的密钥 不过我用的是64位的机子 反正最后这么干成功了 至于为什么 以后再说吧准备程序 注意64位和32位
Apache_HTTP_Server_2.4.12_.zip 附带openssl模块 apache-tomcat-7.0.64 jdk-7u79-windows OpenLDAPforWindows_x64 Win64OpenSSL-1_0_0s ActivePerl_5.16.2.3010812913
构建CA局证明书
构建CA局认证的环境 即私钥和证明书(这个构建的是证明书 不是证明书请求书) 因为是在openssl模块下创建的所以是以下的内容列表 Country Name (2 letter code) "State or Province Name(full name)" Locality Name (eg, city) Organization Name(eg, company) Organization Unit Name "Common Name (eg, your name or your server's hostname)" Email Address
输入命令
openssl req -new -x509 -newkey rsa:2048 -keyout {CA私钥} -out {CA证明书} -days {有效期}
2048是用多少位的字符加密 注意这里有问题 如果用软件自动创建相关的私钥和证书请求书 要注意使用多少位的字符加密的 因为有时候会出现countryName,stateOrProvinceName的不匹配问题
这个明明输入的都是一样的字符依旧出现请求签署时请求书和CA的证明书签名时内容不匹配的错误 针对这个错误
如下处理
# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
...
如果依旧有错误 那么就在linnux下一个代码一个资料老老实实的敲出来吧 然后从虚拟机从拖出来 然后在一个自定义的构建文件用目录创建下列文档和文件 如果不会 还是在linux创建了拖出来吧 这是用来签署一级证书用的环境
mkdir -p demoCA/newcerts
touch demoCA/index.txt
echo 01 > demoCA/serial
echo 01 > demoCA/crlnumber
签署一级证书
CA局的证明书构建完成之后用软件构建一级证书的私钥和证明书请求书
通常证明书请求书是以下内容
Country State/Province() City/Location() Organization() Organizational Unit() Common Name()
需要注意的是请求书和CA局的证书签名时要进行内容匹配的内容的一致性 Commone Name一定要是你要授予证书的服务器域名或主机名
openssl ca -in {一级证明书请求书} -keyfile {CA私钥} -cert {CA証明書} -out {一级証明書}
注意ca私钥是key后缀的 ca证明书是CRT结尾的 证明书自然也是crt后缀的
签署二级证书
将一级证书的环境复制一份 然后创建二级证书的私钥和证明书请求书
openssl ca -in {二级证明书请求书} -keyfile {一级私钥} -cert {一级証明書} -out {二级証明書}
去除密码
openssl rsa -in {二级私钥} -out {解密后的私钥}
需要注意的配置问题
Define SRVROOT “/Apache24”
ServerRoot “${SRVROOT}”
定义的是apache安装的根目录Include conf/extra/httpd-ssl.conf 此处需要激活
因为2.4的版本已经默认激活了ssl的模块 所以那步不用
对于激活上述步骤后无法开启apache 很简单 因为主机名不对应
httpd.conf
ServerName auth-server:80
httpd-ssl.conf
ServerName auth-server:443
Listen auth-server:443
这里对应的是二级证书请求书里面的COMMOM NAME 这个就是请求给那个域名进行签名的servername
最后再hosts中设置 如下例子
IP 域名 主机名
127.0.0.1 auth-server.com。cn auth-server