最近在看《Apache Cookbook》这本书,有章关于 Apache 的 SSL 模块来实现认证的功能,书上讲的比较精简,而且是在 Linux 下的配置。网上的资料很多但是都不详细,这里共享一份 CA 的一位哥们给我的 windows 下的 Apache SSL 的双向认证的配置文档,很全很详细!按照这个实现了一下感觉其实不是很难,主要是 SSL 的加密过程理论很复杂。

1.安装环境

Windows 2000 或以上

Apache 2.x + openssl

PHP 5.1.x 或以上

2.安装前检查

确认 Apache + OpenSSL 已安装。

3.生成证书

3.1 生成 CA 证书和服务器证书

若已有 CA 证书和服务器证书,并已导入浏览器,可略过此步骤。

打开命令行窗口,进入{Apache}\bin,输入“openssl genrsa -out server.key 1024”,生成网站服务器公钥文件 server.key。

输入“openssl req -new -out server.csr -key server.key -config ..\conf\openssl.cnf”

(Common Name 为要申请域名证书的域名)

输入“openssl genrsa -out ca.key 1024”,生成 CA 私钥文件 ca.key。

输入“openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config ..\conf\openssl.cnf”,生成 CA 证书。

在{Apache}/bin 文件下面创建 demoCA 文件夹,并在 demoCA 文件夹里面创建 newcerts 文件夹、index.txt 文件、serial 文件,serial 文件内容为 01。

输入“openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf”,之后会在 bin 目录下面看到多了一个 server.crt 文件,这就是签名以后的服务器证书。

把 server.crt,server.key,ca.crt 文件复制到{Apache}/conf 文件夹下面,打开浏览器把 ca 的证书(ca.crt)导入浏览器。

3.2 生成客户证书

若已有客户证书并已导入浏览器,可略过此步骤。

生成 client.key

C:>openssl req -new -key client.key -out client.csr -config {Apache}/conf/openssl.cnf

生成客户证书 client.crt

C:>openssl x509 -req -days 365 -CA {Apache}/conf/ca.crt -CAkey {Apache}/bin/ca.key -CAcreateserial -in client.csr -out client.crt

将 client.crt 转换为 .pfx 格式的证书

C:>openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

双击 client.p12 将其导入浏览器。

4. 配置 Apache

打开{Apache}/conf/httpd.conf,启用 LoadModule ssl_module modules/mod_ssl.so 和 Include conf/extra/httpd-ssl.conf

打开 httpd-ssl.conf, 设置下列参数

SSLCertificateFile conf/server.crt(服务器证书)
SSLCertificateKeyFile conf/server.key  (服务器私钥)
SSLCACertificateFile conf/ca.crt(CA证书)
<location /{secure}>
SSLVerifyClient require
SSLVerifyClient require
SSLVerifyDepth  1
</location>

其中{secure}是只允许有客户端证书访问的目录

重启 Apache。

转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记

如果觉得本篇文章对您十分有益,何不 打赏一下

谢谢打赏

本文链接地址: Windows 平台 Apache SSL 双向认证

知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可