如何给rails的应用配置https的访问方式

如何给rails的应用配置https的访问方式,第1张

web service在企业应用中常常被用作不同系统之间的接口方式。但是如果没有任何安全机制的话,显然是难以委以重任的。比较直接的web service加密方式就是使用HTTPS方式(SSL证书加密)加密连接,并且只允许持有信任证书的客户端连接,即SSL双向认证。这样就保证了连接来源的可信度以及数据在传输过程中没有被窃取或篡改。通过HTTPS加密方式访问web service具体方法如下:

【准备工作】

(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网站了


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/429408.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-27
下一篇2023-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存