SSL (https) on WAMP
继前篇「WAMP 架设网页伺服器」后,这篇文章要来写如何在WAMP安装SSL的服务。程式开发人员会遇到一些像是金流部分的部分,这时候就不得不考虑SSL模式的测试。具体的作法就是在自己的主机建立CA认证伺服,由自己主机来当凭证中心。烘培参考下列几篇文章
从别人的文章来看,清楚的表示建立SSL的过程,可以分为「制作SSL凭证与公开金钥」与「编辑 Apache SSL 设定档」两部分
Part 1: 制作SSL凭证与公开金钥
开启dos模式命令列视窗
我试著参考「Enable HTTPS on WAMP2」的作法,直接使用wamp安装后包含的openssl.exe来进行建立SSL凭证与金钥
cd C:/wamp/bin/apache/Apache2.2.17/bin openssl genrsa -aes256 -out pass.key 2048
却出现了下面的错误画面,烘培开始认定是64bit的原因所致
所以开了另外一台32bit来试,仍然出现了错误
后来我尝试从网路上直接下载缺少的dll,覆盖后再重试一遍,仍然无法解决错误。看来wamp所附赠的openssl.exe还是有问题,放弃了。我想就直接统一改用文章「在WAMP上启用SSL Module」所提到的win32 openssl代来替,从连结官网可以发现官方有提供32bit与64bit,这边我们就挑选下载和wamp同版本吧(烘培安装的是64bit,轻量版light)与Microsoft Visual C++ 2008 可转散发套件(x64)
在安装之前会提醒你必需有安装Microsoft Visual C++ 2008 可转散发套件。若尚未安装,请先安装刚刚所下载的Microsoft Visual C++ 2008再续继接下来的动作
安装完毕会让你选择希望捐助的金钱,这个就看大家的意思了(不小心被大家看到烘培把全部勾选取消的撷图XD)
正常来讲,安装OpenSSL后,会自动在win7建立一个叫OPENSSL_CONF的系统变数,内容值为刚刚所安装OpenSSL中的openssl.cfg,大家可以参考下图进行检查
如果没有发现这个变数,那么就自己建立一个吧!
为了确保系统变数的有效化,我们先进行「登出」,再「登入」,(XD,重开机也行),再重新来建立私钥的动作
cd C:/OpenSSL-Win64/bin openssl genrsa -aes256 -out pass.key 2048
如果没有错误发生,程式会要求你输入私钥的自订密码二次,接著你会在C:/OpenSSL-Win64/bin发现多了一个名称「pass.key」的私钥档,我们要透过这个私钥来产生公钥与凭证。制作公钥指令如下
openssl rsa -in pass.key -out localhost.key
完成后你应该会在C:/OpenSSL-Win64/bin找到名称「localhost.key」的公钥,接下来制作凭证指令如下:
openssl req -new -x509 -nodes -sha1 -key localhost.key -out localhost.crt -days 999 -config C:/wamp/bin/apache/Apache2.2.17/conf/openssl.cnf
制作凭证的过程中,系统将会要求你输入一些凭证资讯,烘培把要求的输入的资讯大概说明一下
- Country Name (2 letter code) [AU]: TW
#国家简码2码。输入TW。大陆同胞若不认同请直接关掉此文章,谢谢 - State or Province Name (full name) [Some-State]: none
#省分。因为台湾没有省,所以输入"无" - Locality Name (eg, city) []:Taichung
#县市。烘培目前在台中 - Organization Name (eg, company) [Internet Widgits Pty Ltd]: Powmana Studio
#组识或公司。烘培的工作室 - Organizational Unit Name (eg, section) []: Engineering Department
#部门。爆肝的工程部 - Common Name (eg, YOUR name) []: localhost
#授权的名称(通常是网域名称)。因为我们要使用的是本地端,可以输入127.0.0.1或localhost - Email Address []: admin@localhost
#电子邮件。通常名称会是admin@网域名称
上述动作完成后,我们将会得到「pass.key」、「localhost.key」、「localhost.crt」三个档案,第一部分的步骤结束
Part 2: 编辑 Apache SSL 设定档
首先在apache建立置放的资料夹(C:\wamp\bin\apache\Apache2.2.17\conf\ssl),并将所制作的公钥(localhost.key)与凭证(localhost.crt)复制到此资料夹。
(一) 编辑 httpd-ssl.conf
在www中建立一个https的资料夹(C:\wamp\www\https),接著使用笔记本开启apache的ssl设定档(C:\wamp\bin\apache\Apache2.2.17\conf\extra\httpd-ssl.conf),修改下面所提到的部分
1) 储存SSL快取位置SSLSessionCache "shmcb:C:/wamp/logs/ssl_scache(512000)"2) https的根目录与错误讯息位置
DocumentRoot "C:/wamp/www/https" ServerName localhost:443 ServerAdmin admin@localhost ErrorLog "C:/wamp/logs/ssl_error.log" TransferLog "C:/wamp/logs/ssl_access.log"3) 凭证位置
SSLCertificateFile "C:/wamp/bin/apache/Apache2.2.17/conf/ssl/localhost.crt"4) 公钥位置
SSLCertificateKeyFile "C:/wamp/bin/apache/Apache2.2.17/conf/ssl/localhost.key"5) htaccess路由规则
<Directory "C:/wamp/www/https"> SSLOptions +StdEnvVars Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>6) 自订记录
CustomLog "C:/wamp/logs/ssl_request.log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
(二)编辑 httpd.conf
接著用笔记本开启apache的设定档(C:\wamp\bin\apache\Apache2.2.17\conf\httpd.conf),修改下列部分
1) 将原本前面的#移除,载入ssl设定档Include conf/extra/httpd-ssl.conf2) 将原本前面的#移除,启用ssl模组(可以使用wamp右下角介面去启用apache指定的模组)
LoadModule ssl_module modules/mod_ssl.so
(三) 编辑 php.ini
最后开启php的设定档(C:\wamp\bin\apache\Apache2.2.17\bin\php.ini),修改下列部分(可以使用wamp右下角介面去启用PHP扩展)
1) 将原本前面的;移除,载入openssl扩展extension=php_openssl.dll
最后重新启用所有服务(Restart All Services),如果出现绿色的图示,表示SSL已成功启用
我们开启浏览器,输入「https://127.0.0.1」试看看结果,聪明的浏览器马上就察觉这个凭证是有问题,不过我们知道自己的凭证是安全的,就继续给他点下去
因为当时建立凭证时,Common Name是输入locahost,这边我们透过127.0.0.1连结,所以将会有下面结果
改使用https://localhost连结就不会出现了,并将凭证加至安全范围范
但似乎只有IE有作用,Chrome仍然会有此凭证有疑虑
大致上就这样完成SSL的安装了,虽然会有一些警示图示或讯息,但这并不会影响我们开发程式