锦上添花:为最佳JSP服务器Resin加上SSL认证

原创
安全 网站安全
Resin主要是作为WEB服务器的jsp/servlets运行平台。它支持许多WEB服务器软件,而且是完全免费的,并提供了对SUN的J2EE的支持,这要比其它相关的java和javascript开发和运行平台要好的多,而且速度非常快,并提供服务器端直接开发、编译和运行。因此,Resin受到了许多应用JSP的WEB站点的支持。

【51CTO.com 独家特稿】Resin主要是作为WEB服务器的jsp/servlets运行平台。它支持许多WEB服务器软件,而且是完全免费的,并提供了对SUN的J2EE的支持,这要比其它相关的java和javascript开发和运行平台要好的多,而且速度非常快,并提供服务器端直接开发、编译和运行。因此,Resin受到了许多应用JSP的WEB站点的支持。

对于任何一种WEB站点来说,不管使用何种方式的开发平台,运行后最关键的问题之一就是解决服务器与用户之间的安全问题。而对于WEB站点与用户会话过程中数据的机密性保护,目前最好的解决方式主要是使用SSL技术来进行。由于Resin具有的上述优点使得它越来越受欢迎,使用它的WEB站点也就越来越多。

但是,通常状态下,Resin并不对SSL请求做出任何的回应。如果我们需要使用SSL来增加站点与用户之间的数据传输的安全性,我们就必需经过一系列的操作来让Resin提供对SSL加密的支持。
   
一、 在WEB服务器中使用OpenSSL套件

1、安装OpenSSL

想要Resin可以响应SSL请求,我们就必需保证WEB服务器上已经安装好了相关的SSL套件。对于中小企业来说,开源免费的OpenSSL提供与SSL相同的认证功能。

OpenSSL的Linux版本可以在www.openssl.org网站上下载。现在它的最新版本是OpenSSL 0.9.8j。
Resin通过它的libexec/libresinssl.so JNI库文件提供对OpenSSL的支持。如果是在类Linux系统下使用OpenSSL,在安装时可以通过下列命令将它安装到指定的位置:
./configure --with-openssl=/usr/local/ssl

如果我们是在Windows系统中使用Resin,那么,我们同样需要在此操作系统下先安装好OpenSSL。Windows下的OpenSSL在www.slproweb.com/products/Win32OpenSSL.html下载,它的最新安装文件是Win32OpenSSL-0_9_8j.exe,其大小为7MB左右。

在Windows系统下,Resin的resinssl.dll文件中包含提供对OpenSSL支持的代码。(在Resin3.0以前的版本是通过resin.dll文件提供支持的。)因此,在Windows系统下只需要安装好OpenSSL就可以让Resin使用它了。OpenSSL在Windows系统下很容易安装,就如同安装其它的应用程序一样简单。

不过,在Windows系统下安装完OpenSSL后,还应当将一些需要的DLL文件复制到Resin的根目录当中。现在假设Resin安装在c:\resin-3.2.1目录,OpenSSL安装在c:\Program Files\GnuWin32目录。现在打开系统开始菜单的“运行”对话框,在运行框中输入CMD命令,回车后进入命令行终端界面。然后在命令行终端下就可以通过下列所示的命令将OpenSSL安装目录下的相关文件复制到Resin的根目录下:
cd resin-3.2.1
copy c:\Program Files\GnuWin32\bin\libssl32.dll c:\resin-3.2.1\libssl32.dll
copy c:\Program Files\GnuWin32\bin\libeay32.dll c:\resin-3.2.1\libeay32.dll

2、生成SSL认证私钥

SSL认证的密钥由OpenSSL来生成,生成后的密钥应当保存到相应的Resin目录中。因此,在生成密钥前,我们可以在Resin根目录中创建一个keys子目录用来保存将要创建的密钥。在类Linux系统下,我们可以通过下列方式来创建keys目录:
cd /resin
mkdir keys

在Windows系统下,我们可以在资源管理器中直接在Resin根目录下创建一个新文件夹,并命名为keys即可。
在生成密钥时,OpenSSL会根据其配置文件中设置的内容来生成。在类Linux系统下,这个缺省的配置文件可能在usr/ssl/openssl.cnf或/usr/share/ssl/openssl.cnf下。而Windows系统中不存在这样的文件。

当然,我们还可以自己创建一个相应的配置文件保存到Resin/keys/目录下。这样,在创建密钥时,OpenSSL也会根据这个配置文件中的内容来创建,而且,在创建密钥时不会要求我们根据提示输入缺省的相关信息了。

下面是一个openssl.cnf配置文件的相关内容实例:
[ req ]
 default_bits = 1024  #在这里填入加密键的缺省位数
distinguished_name = req的名称
[ req_distinguished_name ]
 C = 在这里填入国家的代码,例如CN,代表中国
 C_default =
 ST = 这里填写州或省名称
 ST_default =
 L = 城市
 L_default =
 O = 企业或机构名称
 O_default =
 OU = 组织中某个部门的名称,例如市场部
 OU_default =
 CN = 我们的网站域名,必需是全名,例如www.myweb.com
 CN_default =
 emailAddress = 联系的E-Mail邮箱地址
 emailAddress_default =

完成OpenSSL配置文件的相关设置后,我们就可以开始为SSL认证创建一个私钥。在WEB服务器上创建私钥时,会要求我们输入相应的密码,这个密码将会在我们使用创建的私钥时要求被输入。因此要牢记这个密码并妥善地保管它。我们还必需将这个密码加入到Resin的配置文件当中。

在类Linux系统下创建私钥时,私钥的文件名可以由我们自己决定,可以通过下列所示命令来完成:
openssl genrsa -des3 -out myprikey.key 1024
在Windows系统下创建私钥。得先进入命令行终端界面,然后用CD命令切换到OpenSSL安装目录,再用下列命令产生私钥;
c:\Program Files\GnuWin32\bin\openssl.exe  genrsa -des3 -out myprikey.key 1024

二、 创建或申请SSL证书:

为了能够加密与用户的会话数据,我们还必需为SSL认证创建或申请一个公钥证书。这个公钥证书在使用时会由Resin发送给用户的浏览器,以便浏览器能够加密其发送的数据。公钥证书可以由OPENSSL产生一个自签名证书,也可以到第三方SSL证书颁发机构申请一个公钥证书。要注意的是,自签名证书将不能被其浏览器所承认。

1、创建一个自签名证书

当我们只是用来测试WEB服务器的SSL安全连接,或者只是作为企业远程办公之用时,那么创建一个自签名证书将会为我们节省一笔小钱。但是,对于这样的自签证书,WEB浏览器是不会承认的,还会为此弹出一个警告框来提醒用户这个证书不是一个公认的SSL证书。不过,用户浏览器与WEB服务器之间的会话数据仍然是被SSL加密了的。

在类Linux系统下创建自签名证书,可以使用下列命令来完成:
openssl req -config ./openssl.cnf -new -key myprikey.key  -x509 -out myself.crt
在Windows系统下创建自签名证书,在字符终端用CD命令进入OpenSSL安装目录后,可以通过下列命令完成:
c:\Program Files\GnuWin32\bin\openssl.exe req -config ./openssl.cnf  -new -key myprikey.key -x509 -out myself.crt
其中,自签名证书的名称可以由我们自己决定,例在本例中为myself.crt,而“-key”参数后带的键文件是在上面我们创建的私钥文件,而命令中的“./openssl.cnf”表示当前目录下的OpenSSL的配置文件。

如果我们没有按前文所述方式生成一个OpenSSL配置文件,或者没有修改此配置文件中的缺少配置值,那么在创建过程中会要求我们提供一些基本的与WEB服务器相关的身份资料,例如企业名称和网站域名等信息。

2、创建一个证书请求文件

如果要使用第三方证书颁发机构上的证书,那么就必需先创建一个证书请求文件(CSR)。这个证书请求文件中包含有证书的公钥、企业名称、加密位数、地址和网站域名等信息。

当我们在第三方证书颁发机构上申请证书时,就会要求我们提交这个证书请求文件,然后,证书颁发机构才能将SSL证书颁发给我们。现在提供SSL证书的机构有许多,例如VeriSign公司就是其中最著名的代表。在生成证书请求文件时一定要注意,我们使用什么样的WEB服务器软件,就必需生成与它相兼容的证书请求文件,这样,SSL证书颁发机构颁发给我们的证书才能在此WEB服务器下使用。

在Linux系统下生成证书请求文件,可以使用下列命令达到目的:
openssl req -new -config ./openssl.cnf -key myprikey.key  -out myprikey.csr
在Windows系统下生成证书请求文件,在命令行界面中通过CD命令进入OpenSSL安装目录后,通过下列命令来完成证书请求文件的生成:
c:\Program Files\GnuWin32\bin\openssl.exe req -new -config ./openssl.cnf  -key myprikey.key –out myprikey.csr
证书请求文件的文件名可以由我们自己来决定,在本文中为myprikey.csr。在生成证书请求文件过程中会要求我们输入一些与WEB服务器身份相关的信息,例如网站域名和企业名称等。我们必需按要求如实填写。

当我们成功注册,并支付相应的年使用费之后,这些证书颁发机构就会将SSL证书发送到我们填写的电子邮箱当中。

三、 配置Resin使用私钥和SSL证书

要想Resin能够使用SSL认证,我们还必需对其配置文件resin.conf做相应的设置。具体要配置的内容包括:
...

 
    keys/ myself.crt
    keys/ myprikey.key
    mypassword
 

其中,中的内容表示SSL连接使用的默认端口号,如果没有特别要求,可以保持默认。之间的内容填入Resin可以使用的SSL认证公钥,在这里为myself.crt。之间的内容填入Resin可以使用的私钥,在本文中为myprikey.key。至于之间就是填入我们在创建私钥时设置的密码。

四、 测试Resin的SSL加密连接

当我们配置好Resin的SSL认证后,我们还可以通过一些方式来检验我们的配置是否正确。
在Windows系统下,我们就可以通过在WEB浏览器地址栏中输入https://URL(企业网站的域名)的方式,来验证WEB服务器是否对这样的URL地址做出正确响应。如果返回正常的内容,并且在WEB浏览器地址栏中显示出一个挂锁的标志,那么,Resin的SSL配置就算成功了。

在Linux系统下,除了可以上述方式来检验外,还可以通过下列方式来验证:
openssl s_client -connect www.myweb.com:443 –prexit
另外,我们还可以通过下列的JSP脚本来快速验证Resin是否对SSL做出反应:
Secure? <%= request.isSecure() %>
经过上述的检验操作后,如果都能得到WEB服务器的正确响应,那么就说明Resin已经能够提供对SSL技术的支持了。

也就是说,当用户通过WEB浏览器向WEB服务器发送一个SSL请求时,Resin就会为这个WEB浏览器提供SSL认证的公共密钥,然后,这个WEB浏览器就可以使用这个公共密钥来加密数据,而Resin将使用WEB服务器的SSL私钥对加密的数据进行解密。

【51CTO.COM 独家特稿,转载请注明出处及作者!】

【编辑推荐】

  1. 利用HTTP-only Cookie缓解跨站点脚本攻击 
  2.  基于IE的MIME sniffing功能的跨站点脚本攻击 
  3. 安全专家详谈:对付恶意软件的策略及方法
  4. 帮你解开Twitter的Don't Click攻击的神秘面纱 
  5. 安全公司称俄罗斯已成为垃圾邮件超级大国
  6. 诺顿再次误升级 厂商可无视用户许可?
责任编辑:王文文 来源: 51CTO.com
相关推荐

2011-08-29 16:50:30

2010-04-01 18:56:37

2009-07-06 14:05:11

JSP服务器

2017-03-06 09:26:56

Nginx服务器 SSL

2009-07-02 17:17:03

2009-07-03 13:05:47

JSP HTTP服务器

2009-07-06 17:46:25

JSP HTTP服务器

2012-02-02 10:24:08

JavaResin

2009-07-06 18:02:34

JSP服务器

2009-07-06 17:56:12

JSP HTTP服务器

2011-08-30 11:19:25

远程服务器数据中心迁移服务器管理工具

2009-09-17 18:02:06

2010-07-22 16:28:29

2009-08-26 22:35:20

2009-08-14 16:09:12

2009-08-26 23:13:44

2012-03-27 10:31:41

JavaResin

2009-07-06 17:34:38

JSP HTTP服务器

2009-08-26 22:37:46

服务器证书SSL

2012-06-13 01:51:05

ResinJava
点赞
收藏

51CTO技术栈公众号