如何给JSP服务器Resin加上SSL认证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何给JSP服务器Resin加上SSL认证相关的知识,希望对你有一定的参考价值。

为最佳JSP服务器Resin加上SSL认证
Resin主要是作为WEB服务器的jsp/servlets运行平台。它支持许多WEB服务器软件,而且是完全免费的,并提供了对SUN的J2EE的支持,这要比其它相关的java和javascript开发和运行平台要好的多,而且速度非常快,并提供服务器端直接开发、编译和运行。因此,Resin受到了许多应用JSP的WEB站点的支持。
一、 在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私钥对加密的数据进行解密。
参考技术A 、 在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本回答被提问者和网友采纳

Resin 4.0 部署SSL证书

前言

Resin目前最新的版本还是4.0 (4.0.49),使用Java EE6,在Resin上部署证书,一般有两种方式,首先我们推荐采用Openssl方式,不仅因为Openssl模式下的速度更快,而且Openssl对TLS的支持更好,安全性高;另外一种JSSE方式,不仅速度慢,而且JSSE6仅支持TLS1.0。

我们在下面会分别介绍这2种模式。

查找中间证书

如果采用Openssl模式部署证书,为了确保兼容到所有浏览器,我们必须部署中间证书,如果不这么做,虽然安装过程并不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别。请到 中间证书下载工具,输入您的Server.cer,然后下载中间证书,请将中间证书保存为Chain.cer。

制作JKS文件

JKS(Java Keystroe)文件是我们后面用来部署JSSE模式下所需要的文件。

请将收到的Server.cer和Server.key文件,到 JKS在线合成工具 合成一个新的JKS文件。在这里需要设置2个参数:
  • 别名:导入到JKS中的密钥对的索引名称,可以设置为“ssl”。
  • 密码:访问JKS的密码。

部署SSL证书

Openssl模式

 打开Resin.xml,增加下面配置:

 <resin xmlns="http://caucho.com/ns/resin">
   <cluster id="http-tier">

   <server id="a" address="192.168.1.12">
     <http port="443">
       <openssl>
         <certificate-file>keys/server.cer</certificate-file>
         <certificate-key-file>keys/server.key</certificate-key-file>
         <password>my-password</password>
         <certificate-chain-file>keys/chain.cer</certificate-chain-file>
         <cipher-suite>ALL:!ADH:+HIGH:+MEDIUM:!NULL:!DH:!RC4:!DES" </cipher-suite>
        <protocol>tlsv1 tls1.1 tls1.2</protocol>
       </openssl>
    </http>
   </server>

  ...
 </resin> 

 说明:

  • <certificate-file>:服务器证书文件。
  • <certificate-key-file>:服务器证书的私钥文件。
  • <password>:服务器证书私钥文件的密码,如果原私钥文件没有密码,可以运行如下openssl命令:
openssl rsa -in server.key -des -out serverpass.key -passout pass:123456
  • <certificate-chain-file>:中间证书文件。
  • <cipher-suite>:加密套件设定。
  • <protocol>:协议说明,一般只打开TLS 1 , TLS 1.1, TLS 1.2协议。

JSSE模式

打开resin.xml,增加以下参数:

<resin xmlns="http://caucho.com/ns/resin">
  <cluster id="">
    <server-default> 
    <http port="443">
     <jsse-ssl>
       <key-store-type>jks</key-store-type>
       <key-store-file>keys/server.keystore</key-store-file>
       <password>changeit</password>        
       <protocol>-sslv3</protocol>
     </jsse-ssl>
    </http>
    </server-default>
    ...
  </cluster>
</resin>

 说明:

  • <key-store-type>:设定Keystore文件的类型,这里一般都设为jks。
  • <key-store-file>:JKS文件名。
  • <password>:JKS文件的密码。
  • <protocol>:支持的协议。

https://www.myssl.cn/ssl/resin/java/install.htm

以上是关于如何给JSP服务器Resin加上SSL认证的主要内容,如果未能解决你的问题,请参考以下文章

resin 中jsp 编译之后的java文件在哪里 ?

Java环境 使用Resin在NT环境下配置JSP环境

Resin4下JSP文件导出问题的解决

解决resin下jsp中文一直乱码

如何修剪 Caucho Resin 上的空白区域?

整合Apache2.4 Resin3.1