毕业设计是和同学一起做一个项目管理系统。这个系统介绍就先跳过,直接进入与本贴相关的内容。
考虑到安全性,这个系统希望在数据敏感的模块用ssl实现数据加密安全。我分配到这个任务之前对这块可是完全不懂,没有办法,接了任务也只有硬着头皮做。
现在把几天下来的ssl相关的东西记录下来,免得以后忘记。
ssl杂记
ssl是介于通讯层和应用层之间的,应用起来很简单,在电子商务中应用广泛。但是它是能保证数据的保密性,完整性,但是不能对信息偷听进行监测。
在web服务器上实现ssl安全服务的步骤如下:
1,使用密钥管理器生成一个密钥对文件和一个请求文件。可以用openssl来做,网上有一个已经编译好的windows下的可执行文件,里面可以直接生成这步需要的东西。地址如下:http://thinkbase.net/w/main/Wiki?Tomcat5SSL_ServerAndClient,把里面的工具包下下来运行里面的bat文件就可以生成密钥文件和请求文件了。
2,从一个认证机构获得一个证书,当然你也可以用openssl自己生成证书,然后自己给自己验证(这种方法当然作为商业用途显然不妥,作为测试还是可以的。另外,openssl是免费的)
3,在你的服务器上安装新获得的证书。http://thinkbase.net/w/main/Wiki?Tomcat5SSL_ServerAndClient,在这个例子中有告诉你在tomcat下怎样部属生成的密钥文件。
4,激活web服务文件夹中的ssl安全功能。
注意:先将证书导入IE,(不导入也可以,让IE弹出证书选择选项)。访问的时候要求用https来访问,当然,你也可以在服务器端对http访问地址进行选择,将其redirect 到https上面来。在ruby下面有一个免费的插件ssl_requirement(http://dev.rubyonrails.org/svn/rails/plugins/ssl_requirement/),很小,用来控制访问请求在http和https之间的过滤,使用非常方便。使用方法如下:
首先,
在自己的控制器里面导入ssl_requirement(首先要将ssl_requirement.rb文件加入到lib目录下)
在自己的控制器头部定义哪些action是到https的,哪些是到http的,格式如下:
ssl_requird [:action1, :action2 [...]]
ssl_allowed [:action_a, :action_b [...]]
eg.
ssl_required :login,:changeInfo
ssl_allowed :index, :hello
然后在自己的控制器里面定义相应的action
给一个完整的例子如下:
建立一个控制器account
class AccountController < ApplicationController
ssl_required :signup, :payment #signup,payment会被跳转到https下面
ssl_allowed :index #这个就不用跳转,直接用http访问即可。
def signup
# Non-SSL access will be redirected to SSL
end
def payment
# Non-SSL access will be redirected to SSL
end
def index
# This action will work either with or without SSL
end
end
现在我也只是照着网上的例子在webrick下实现了ssl(用openssl),但是要将其用到实际中去还是有很长一段路走。
在webrick下面实现ssl时还参考了下面的文章:
http://d.hatena.ne.jp/elm200/20070428/1177752908 ,这个篇日文,里面提供了两段代码片断,第一个代码片段是个脚本,运行它会在控制台下打印私钥和公钥。第二个片段是用来启动webrick ssl服务的,新建RAILS_ROOT/script /webrick_ssl文件,将第二段代码粘到webrick_ssl下面,运行这个文件然后就可以访问https://localhost:3500/ 目录了,因为没有提供认证服务,所以IE会提示无效证书。当然,这些都是依赖于openssl动态调用库的。网上有编译好的windows下的openssl的dll。http://www.deanlee.cn/programming/openssl-for-windows/ ,openssl编译好的windows二进制文件。
自己在netbean6.01下安装jruby-openssl插件后一直无法运行上面的例子,自己另外装了ruby ,rails 然后才将这个例子跑起来。
如果要在tomcat5.x下运行ssl服务,参考http://thinkbase.net/w/main/Wiki?Tomcat5SSL_ServerAndClient+%E5%9C%A8+Tomcat+5.5+%E4%B8%8A%E7%9A%84%E9%85%8D%E7%BD%AE%E5%AE%9E%E4%BE%8B 就可以了,前提是你要先看http://thinkbase.net/w/main/Wiki?Tomcat5SSL_ServerAndClient