【准备工作】
(1)检查JDK的环境变量是否正确。本文使用JDK 1.6
(2)准备web服务器,这里选用TOMCAT 6.0
(3)准备web service服务端和客户端。
【生成证书】
这里用到的文件,这里存放在D:/SSL/文件夹内,其中D:/SSL/server/内的文件是要交给服务器用的,D:/SSL/client/内的文件是要交给客户端用的。
1生成服务端证书
开始-运行-CMD-在dos窗口执行下执行命令:
keytool -genkey -v -aliastomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650-storepass zljzlj -keypass zljzlj
说明:
keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help
-genkey 创建新证书
-v 详细信息
-alias tomcat 以”tomcat”作为该证书的别名。这里可以根据需要修改
-keyalg RSA 指定算法
-keystoreD:/SSL/server/tomcat.keystore 保存路径及文件名
-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" 证书发行者身份,这里的CN要与发布后的访问域名一致。但由于这里是自签证书,如果在浏览器访问,仍然会有警告提示。真正场景中建议申请CA机构(wosign)签发的SSL证书更安全。
-validity 3650证书有效期,单位为天
-storepass zljzlj 证书的存取密码
-keypass zljzlj 证书的私钥
2 生成客户端证书
执行命令:
keytool ‐genkey ‐v ‐aliasclient ‐keyalg RSA ‐storetype PKCS12 ‐keystore D:/SSL/client/client.p12 ‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN" ‐validity 3650 ‐storepassclient ‐keypass client
说明:
参数说明同上。这里的-dname 证书发行者身份可以和前面不同,到目前为止,这2个证书可以没有任何关系。下面要做的工作才是建立2者之间的信任关系。
3 导出客户端证书
执行命令:
keytool ‐export ‐aliasclient ‐keystore D:/SSL/client/client.p12 ‐storetype PKCS12 ‐storepass client‐rfc ‐file D:/SSL/client/client.cer
说明:
-export 执行导出
-file 导出文件的文件路径
4 把客户端证书加入服务端证书信任列表
执行命令:
keytool ‐import ‐aliasclient ‐v ‐file D:/SSL/client/client.cer ‐keystoreD:/SSL/server/tomcat.keystore ‐storepass zljzl
说明:
参数说明同前。这里提供的密码是服务端证书的存取密码。
5 导出服务端证书
执行命令:
keytool -export -aliastomcat -keystore D:/SSL/server/tomcat.keystore -storepass zljzlj -rfc -fileD:/SSL/server/tomcat.cer
说明:
把服务端证书导出。这里提供的密码也是服务端证书的密码。
6 生成客户端信任列表
执行命令:
keytool -import -fileD:/SSL/server/tomcat.cer -storepass zljzlj -keystoreD:/SSL/client/client.truststore -alias tomcat –noprompt
说明:
让客户端信任服务端证书
【 配置服务端为只允许HTTPS连接】
1 配置Tomcat 目录下的/conf/server.xml
Xml代码:
<Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"clientAuth="true"
sslProtocol="TLS"keystoreFile="D:/SSL/server/tomcat.keystore"
keystorePass="zljzlj"truststoreFile="D:/SSL/server/tomcat.keystore"
truststorePass="zljzlj" />
说明:
在server.xml里面这段内容本来是被注释掉的,如果想使用https的默认端口443,请修改这里的port参数。其中的clientAuth="true" 指定了双向证书认证。
2 配置服务端项目web.xml
在<welcome-file-list>之后增加Xml代码:
<!-- 强制SSL配置,即普通的请求也会重定向为SSL请求 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/service/*</url-pattern><!--全站使用SSL <url-pattern>/*</url-pattern>-->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<!-- CONFIDENTIAL: 要保证服务器和客户端之间传输的数据不能够被修改,且不能被第三方查看到 -->
<!-- INTEGRAL: 要保证服务器和client之间传输的数据不能够被修改 -->
<!-- NONE: 指示容器必须能够在任一的连接上提供数据。(即用HTTP或HTTPS,由客户端来决定)-->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
说明:
这里限制了WEB service服务地址的访问必须为https连接。<url-pattern>要根据你的web service服务地址配置。
【修改客户端代码】
在执行访问之前,增加Java代码:
System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore")
System.setProperty("javax.net.ssl.trustStorePassword","zljzlj")
System.setProperty("javax.net.ssl.keyStoreType","PKCS12")
System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12")
System.setProperty("javax.net.ssl.keyStorePassword","client")
StringendPoint="https://127.0.0.1:8443/easbCut/services/ApplyFormService"
...
通过设置参数来指定客户端连接时所使用的客户端证书,这里还可以采用修改JVM启动参数的的方式来执行,但出于不影响其他功能的考虑,这里采用System.setProperty的方式来设置这些参数,在使用结束后,可以还原这些参数配置。做为客户端的开发者,可以把拿到的证书文件后,只执行步骤3。
回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !
打开Rails的命令行,到应用的根目录,执行rails console启动。注意,要到Rails应用的根目录,我的是E:\greensoft\RailsInstaller\Sites\simple_cms>E:\greensoft\RailsInstaller\Sites\simple_cms>rails console
Loading development environment (Rails 3.2.1)
irb(main):001:0>
回显的第一行提示了启动加载了Rails开发环境,之后显示的与irb没什么两样。接下来的操作其实就是普通的irb操作,只不过现在的这个irb,是能够访问当前rails应用的。先来几个普通的irb操作
E:\greensoft\RailsInstaller\Sites\simple_cms>rails console
Loading development environment (Rails 3.2.1)
irb(main):001:0>1+2
=>3
irb(main):002:0>"abbuggy".upcase
=>"ABBUGGY"
irb(main):003:0>
接下来,操作一下我们自定义的模型Subject。创建一个Subject的实例subject1,再把它保存到数据库中。
irb(main):001:0>subject1=Subject.new
=>#<Subject id: nil, created_at: nil, updated_at: nil>
irb(main):002:0>subject1.save
[1m[36m (0.0ms)[0m [1mBEGIN[0m
[1m[35mSQL (16.0ms)[0m INSERT INTO `subjects` (`created_at`, `updated_at`) VALUES ('2012-09-03 16:31:39', '2012-09
-03 16:31:39')
[1m[36m (27.0ms)[0m [1mCOMMIT[0m
=>true
irb(main):003:0>
使用的new,save操作都是继承自ActiveRecord的,后面会详细了解这里只要知道是在创建和保存对象就ok。
你看,通过rails console短短几行代码就可以进行模型与数据库的交互操作,如果你需要向数据库中插入一批实验数据,这回很有帮助。
注意刚才进入rails console时候的回显Loading development environment (Rails 3.2.1),系统提示我们进入的是开发环境,这是缺省值。如果你希望进入其他的环境只需要在rails console后面跟上其他环境的名字。如rails consle production,不过当尝试进入已经上线运行的production环境是可得多加小心,不要把数据弄坏了。
安装Xcode 4.1,Xcode4.2以及更高的版本在 Lion 仍然存在一些兼容性问题,强烈建议使用XCode 4.1,下载地址:安装RVM
$ bash <<(curl -s )
配置RVM自动加载,将下面这一行代码添加到~/.bash_profile中,然后退出iTerm并重新启动
[[ -s $HOME/.rvm/scripts/rvm ]] &&source $HOME/.rvm/scripts/rvm
安装 ruby-1.9.2-p290
$ rvm install 1.9.2
设置系统默认使用 ruby-1.9.2
$ rvm use 1.9.2 --default
步骤1 安装 Rails
安装Rails
$ gem install rails
Rails安装完成后,创建一个rails项目,假定你的项目叫做:awesome project
$ rails new awesome_project
启动Rails,并访问
$ cd awesome_project $ rails server
步骤2 安装 Passenger 和 Nginx
首先通过gem安装passenger
$ gem install passenger
因为Nginx不支持动态module载入,所以需要通过Passenger来自动下载,编译,安装由Passenger修改版的Nginx:
安装Passenger + Nginx
$ passenger-install-nginx-module
Yes: download, compile and install Nginx for me. (recommended) The easiest way to get started. A stock Nginx 1.0.10 with Passenger support, but with no other additional third party modules, will be installed for you to a directory of your choice.
No: I want to customize my Nginx installation. (for advanced users) Choose this if you want to compile Nginx with more third party modules besides Passenger, or if you need to pass additional options to Nginx's 'configure' script. This installer will 1) ask you for the location of the Nginx source code, 2) run the 'configure' script according to your instructions, and 3) run 'make install'.
Whichever you choose, if you already have an existing Nginx configuration file, then it will be preserved.
Enter your choice (1 or 2) or press Ctrl-C to abort: 这里建议选择1
Please specify a prefix directory [/opt/nginx]: /usr/local/nginx
当询问nginx的安装路径的时候,个人建议安装到/usr/local/nginx下
当安装完成后,会在console中提示如何配置Nginx
Passenger会自动帮你将下面两行添加到Nginx的配置文件中/usr/local/nginx/conf/nginx.conf(很人性化)
http { ... passenger_root /Users/Daniel/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.10passenger_ruby /Users/Daniel/.rvm/wrappers/ruby-1.9.2-p290/ruby... }
server { listen 80server_name www.yourhost.comroot /somewhere/public# <--- be sure to point to 'public'! passenger_enabled on}
请不要忘记将nginx命令行程序连接到/usr/local/sbin
$ sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
步骤3 配置Nginx + Passenger + Rails
修改hosts文件,给你的项目一个本地域名, 比如awesome_project.local
$ sudo vim /etc/hosts
127.0.0.1 awesome_project.local
测试hosts
$ ping awesome_project.local
PING awesome_project.local (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.054 ms
继续配置Nginx, 这里我给出一个最小可运行的Nginx配置文件
$ vim /usr/local/nginx/conf/nginx.conf
nginx.conf
worker_processes 1
events {
worker_connections 1024
}
http {
passenger_root /Users/Daniel/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.10
passenger_ruby /Users/Daniel/.rvm/wrappers/ruby-1.9.2-p290/ruby
include mime.types
default_type application/octet-stream
sendfile on
keepalive_timeout 65
server {
listen 80
server_name awesome_project.local
root /Users/Daniel/awesome_project/public
passenger_enabled on
rails_env development
}
}
测试Nginx的配置文件语法是否正确
$ sudo nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动Nginx
$ sudo nginx
如何在修改Nginx的配置文件后,让Nginx载入新配置
$ sudo nginx -s reload
如何停止Nginx
$ sudo nginx -s stop
如何在不停Nginx的情况下,重新启动Passenger
$ cd path/to/your/awesome/project
$ touch tmp/restart.txt
好了,这个时候你可以打开浏览器,访问你的awesome_project网站了
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)