openssl使用自定义CA签名证书

使用Openssl生成CA证书并使用CA证书对自己网站的证书自签名的过程

以下是我在查询相关数据资料时根据自己的实践的成功案例。网上的问题很多,这里留存一份自己成功的案例备用。

1、下载带有openSSL的apache安装包,我下载的为apache_2.2.11-win32-x86-openssl-0.9.8i.msi,安装后确认一下bin路径下的openssl.exe,ssleay32.dll和libeay32.dll,无误进行下一步。

2、修改两个配置文件,一个为conf/httpd.conf,另一个为conf/extra/httpd-ssl.conf

(a)修改httpd.conf
为了使apache启动的时候调用ssl的服务,我们需要在配置文件中做一些修改。找到以下两句话并去掉注释,则可以开启apache的时候启动ssl服务:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-mpm.conf

(b)修改httpd-ssl.conf

修改的主要是我们生成的证书的路径(我把路径设置为conf下的key目录,把生成的证书放进这个目录,接下来会说怎么生成)
SSLCertificateFile xxx/conf/key/server.crt (服务器证书的位置)
SSLCertificateKeyFile xxx/conf/key/server.key (服务器私钥的位置)
SSLCACertificateFile xxx/key/conf/ca.crt (CA根证书的位置,进行客户端验证时需要)
SSLVerifyClient require (去掉前面的‘#’号,进行客户端验证时需要)
SSLVerifyDepth 1 (去掉前面的‘#’号,把10改为1,进行客户端验证时需要)
打开httpd-ssl.conf,ctrl+f 搜关键字修改就可以了。
在这里如果不要对客户端进行双向验证,那么就可以省去这一环。在浏览器处安装CA证书到根路径就可以正常使用HTTPS访问网站了。

3、生成服务端和客户端的证书

win+R:cmd进入命令行,进去apache安装目录的bin文件夹,执行命令设置一下openssl的配置:
set OPENSSL_CONF=..\conf\openssl.cnf (这里最好的绝对路径)
(可直接配置环境变量)

(a)生成服务端的私匙

执行命令:openssl genrsa -des3 -out server.key 1024,在目录bin下生成server.key文件
清除密码:openssl rsa -in server.key -out server.key
对客户端的操作是一样:
openssl genrsa -des3 -out client.key 1024
openssl rsa -in client.key -out client.key
(b)生成签署申请
执行命令:openssl req -new -out server.csr -key server.key -config ..\conf\openssl.cnf,在目录bin下生成server.csr文件,这个过程中要填入一些信息,按照提示要求填就可以了,但是要记住Common Name必须和httpd-ssl.conf中的serverName一致,不然客户端会显示证书信息不能认证。
对客户端:
openssl req -new -out client.csr -key client.key ..\conf\openssl.cnf

(c)生成CA私匙

执行命令:openssl genrsa -des3 -out ca.key 1024,在目录bin下生成ca.key文件
清除密码:openssl rsa -in ca.key -out ca.key

(d)生成CA生成自签署证书

执行命令:openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config ..\conf\openssl.cnf,在目录bin下生成ca.crt文件 (这个就是我们的CA证书了,可以用来签发各种证书充当ROOTCA的角色)

(e)生成CA的服务器签署证书
在当前目录下建立一个demoCA目录,在demoCA目录里面创建一个index.txt空文件,以及一个名为serial、内容为01的文件,以及一个文件夹newcerts
demoCA/index.txt (空文件)
demoCA/serial (文件内容为01)
demoCA/newcerts(文件夹)
执行命令:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf
客户端同样:
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf

4、把当前文件夹中的server.crt,server.key和ca.crt文件复制到步骤2所说的目录conf/key下

5、为了方便,我把httpd.conf和httpd-ssl.conf文件中的ServerName分别改为

127.0.0.1:80 (最好都使用自己的虚拟主机名称)
127.0.0.1:443

6、重启apache,执行两个命令net stop Apache2.2和net start Apache2.2,假如遇到apache无法启动的时候,可以选我的电脑->管理->事件检查器->应用程序日志,打开apache的错误报告,会有提示哪里出错了,一般都可以找到原因。

7、打开浏览器,输入https://127.0.0.1:443 (12.0.0.1可以改为虚拟主机名称,注意和证书里面的一致)

根据情况的不同,我们可以生成p12文件安装到客户机浏览器的个人证书中(如果需要开启客户端验证的话就需要,不开启,就不需要,不开启如果是自签名的证书,只要将证书导入客户机浏览器受信任的证书颁发机构即可,如果是自制CA,在用CA签名的,只需要将CA导入即可。)
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx

你可能感兴趣的:(openssl)