公司一直采用日本NTT DATA公司开发的intra-mart系统进行日常事务管理,有关该产品的详细情况可参考http://www.intra-mart.co.jp 。
最近公司希望该系统对外开放,以便能随时随地使用该系统。所以安全性成了一个课题,该系统默认安装时是不带SSL功能的,为了使数据传输的安全性,我们必须为服务器提供SSL协议。
以前没有接触过这方面的东西,而且网上关于intra-mart配置SSL的资料少的可怜,基本没有。经过一天时间的调查,终于解决了问题。
首先说明一下,公司采用的intra-mart是ver. 6.1,web服务器是Resin ver. 3.0.23,intra-mart完全把Resin Custom化成自己的东西了,不过核心还是 Resin。下面是配置SSL的过程:
1. 下载OpenSSL并安装 http://gnuwin32.sourceforge.net/packages/openssl.htm
2. 下载ssleay32.dll http://sh.itxiazai.com/soft/system/dll/ITxiazai_ssleay32.rar
3. 下载Resin ver. 3.0.23的专业版并解压 http://www.caucho.com/download/resin-pro-3.0.23.zip
4. 在intra-mart根目录下建一个文件夹存放有关OpenSSL的动态库,并拷贝相关DLL到该目录下。
C:/> cd imart
C:/imart> mkdir ssldll
C:/imart> copy "C:/downloads/ssleay32.dll" ./ssldll/ssleay32.dll
C:/imart> copy "C:/Program Files/GnuWin32/bin/libeay32.dll" ./ssldll/libeay32.dll
C:/imart> copy "C:/resin-pro-3.0.23/win32/resin.dll" ./ssldll/resin.dll
C:/imart> copy "C:/resin-pro-3.0.23/win32/resin_os.dll" ./ssldll/resin_os.dll
C:/imart> copy "C:/resin-pro-3.0.23/win32/resinssl.dll" ./ssldll/resinssl.dll
5. 在intra-mart根目录%IMART_HOME%下建一个 keys 文件夹,%IMART_HOME%/keys 下新建文件openssl.cnf 内容如下:
[ req ]
default_bits = 1024
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
C = 2 letter Country Code, for example US
C_default =
ST = State or Province
ST_default =
L = City
L_default =
O = Organization Name
O_default =
OU = Organizational Unit Name, for example 'Marketing'
OU_default =
CN = your domain name, for example www.hogwarts.com
CN_default =
emailAddress = an email address
emailAddress_default =
6. 建立gryffindor.key
C:/>cd C:/imart/keys
C:/imart/keys> "C:/Program Files/GnuWin32/bin/openssl.exe" genrsa -des3 -out gryffindor.key 1024
7. 建立gryffindor.crt
C:/>cd C:/imart/keys
C:/imart/keys> "C:/Program Files/GnuWin32/bin/openssl.exe" req -config ./openssl.cnf -new -key gryffindor.key -x509 -out gryffindor.crt
8. 配置http.conf,该文件在C:/imart/work/httpd/configuration目录下。
<!--
<http host="*" port="8080" server-id="APP:172.26.2.17:8080"/>
-->
<http host="*" port="8080" server-id="APP:172.26.2.17:8080">
<openssl>
<certificate-file>C:/imart/keys/gryffindor.crt</certificate-file>
<certificate-key-file>C:/imart/keys/gryffindor.key</certificate-key-file>
<password>test123</password>
</openssl>
</http>
9. 在系统的环境变量PATH里将SSL相关的库目录C:/imart/ssldll添加进去。
10. 重启机器,开启intra-mart服务,测试是否成功。
说明: ①配置http.conf时, <certificate-file>和<certificate-key-file> 文件的路径 要用绝对路径;
② 配置http.conf时, 添加openssl时,Resin的配置是另外加一个端口,但在intra-mart另加SSL端口不行,没办法只好将原来的端口设成SSL端口了;
③Resin的官方文档里说还只要libssl32.dll和libeay32.dll库,但根据我的配置,libssl32.dll是不要的,而且还另外加了ssleay32.dll,也许是和版本有关;
④其他的DLL库版本必须和intra-mart中用到的Resin的版本一致,这里是3.0.23专业版。
参考资料: http://www.caucho.com/resin-3.0/security/ssl.xtp