自己动手写Redmine https服务端

本文详细介绍了如何在 Redmine 中配置 HTTPS 服务,包括创建 RSA 私钥、CSR、自签名认证证书,以及使用 Ruby 脚本启动带有 SSL 的 Webrick 服务器。通过遵循步骤,可以实现 Redmine 的安全加密通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/wangjingfei/article/details/5609483


来由:

Redmine默认采用了Webrick服务器,默认启动只支持http服务,但在某些时候,项目管理有较高的保密要求(这里暂且不考虑效率问题),需要开启https服务。网络上介绍开启Redmine https的文章并不少,但是由于软件和操作系统的版本区别,修改方式各不相同,甚至需要修改的文件名称都不相同。这样,与其照网络上的文章修改,不如自己写一个服务脚本。

 

软件列表:

Ruby,Gem,rails,openssl等依赖软件。

 

Ruby快速入门:

http://tech.ddvip.com/2008-01/120059715340597.html

 

(假设redmine放在/home/fify/redmine目录下)

0. 首先将pwd定位到/home/fify/redmine/config/certs目录下

[c-sharp]  view plain copy
  1. mkdir /home/fify/redmine/config/certs  
  2. cd /home/fify/redmine/config/certs  

1. 创建RSA私钥

[c-sharp]  view plain copy
  1. openssl genrsa -des3 -out server.key 1024  

2. 创建CSR(Certificate signing request)

[c-sharp]  view plain copy
  1. openssl req -new -key server.key -out server.csr  

3. 去掉私钥中的passphrase

[c-sharp]  view plain copy
  1. cp server.key server.key.org  
  2. openssl rsa -in server.key.org -out server.key  

4. 创建自签名认证证书

[c-sharp]  view plain copy
  1. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt  

此时,改目录下的工作已经完成,转移到redmine目录:

[c-sharp]  view plain copy
  1. cd /home/fify/redmine  

5. 创建Webrick启动脚本

[c-sharp]  view plain copy
  1. vi script/server_ssl  

以下是ruby脚本代码:

[ruby] view plaincopy
  1. #!/usr/bin/env ruby    
  2. require File.dirname(__FILE__) + '/../config/boot'    
  3. require 'webrick'    
  4. # 包含必须的库  
  5. require 'webrick/https'    
  6. require 'optparse'    
  7. puts "=> Booting WEBrick..."    
  8. OPTIONS = {    
  9. # 端口号  
  10.   :port         => 3001,    
  11. # 监听主机地址  
  12.   :Host         => "0.0.0.0",    
  13.   :environment  => (ENV['RAILS_ENV'] || "development").dup,    
  14. # 存放redmine中public的路径,这里采用相对路径,保证可移植性  
  15.   :server_root  => File.expand_path(File.dirname(__FILE__) + "/../public/"),    
  16. # 存放私钥的地址  
  17.   :pkey         => OpenSSL::PKey::RSA.new(    
  18.                       File.open(File.dirname(__FILE__) + "/../config/certs/server.key").read),    
  19. # 存放签名证书的地址  
  20.   :cert         => OpenSSL::X509::Certificate.new(    
  21.                       File.open(File.dirname(__FILE__) + "/../config/certs/server.crt").read),    
  22.   :server_type  => WEBrick::SimpleServer,    
  23.   :charset      => "UTF-8",    
  24.   :mime_types   => WEBrick::HTTPUtils::DefaultMimeTypes,    
  25.   :config       => RAILS_ROOT + "/config.ru",    
  26.   :detach       => false,    
  27.   :debugger     => false,    
  28.   :path         => nil    
  29. }    
  30. # 以下读入命令行参数  
  31. ARGV.clone.options do |opts|    
  32.   opts.on("-p""--port=port"Integer,    
  33.           "Runs Rails on the specified port.""Default: 3001") { |v| OPTIONS[:Port] = v }    
  34.   opts.on("-b""--binding=ip"String,    
  35.           "Binds Rails to the specified ip.""Default: 0.0.0.0") { |v| OPTIONS[:Host] = v }    
  36.   opts.on("-d""--daemon""Make server run as a Daemon.") { OPTIONS[:detach] = true }    
  37.   opts.on("-u""--debugger""Enable ruby-debugging for the server.") { OPTIONS[:debugger] = true }    
  38.   opts.on("-e""--environment=name"String,    
  39.           "Specifies the environment to run this server under (test/development/production).",    
  40.           "Default: development") { |v| OPTIONS[:environment] = v }    
  41.   opts.separator ""    
  42.   opts.on("-h""--help""Show this help message.") { puts opts; exit }    
  43.   opts.parse!    
  44. end    
  45. # 设置启动环境,production或development等  
  46. ENV["RAILS_ENV"] = OPTIONS[:environment]    
  47. RAILS_ENV.replace(OPTIONS[:environment]) if defined?(RAILS_ENV)    
  48. # 读取redmine配置文件  
  49. require File.dirname(__FILE__) + "/../config/environment"    
  50. require 'webrick_server'    
  51. require 'webrick/https'    
  52. OPTIONS['working_directory'] = File.expand_path(File.dirname(__FILE__))    
  53. # 初始化带SSL的webrick服务器  
  54. class SSLDispatchServlet < DispatchServlet    
  55.   def self.dispatch(options)    
  56.     Socket.do_not_reverse_lookup = true    
  57.     server = WEBrick::HTTPServer.new(    
  58.       :Port             => options[:port].to_i,    
  59.       :ServerType       => options[:server_type],    
  60.       :BindAddress      => options[:Host],    
  61.       :SSLEnable        => true,    
  62.       :SSLVerifyClient  => OpenSSL::SSL::VERIFY_NONE,    
  63.       :SSLCertificate   => options[:cert],    
  64.       :SSLPrivateKey    => options[:pkey],    
  65.       :SSLCertName      => [ [ "CN", WEBrick::Utils::getservername ] ]    
  66.     )    
  67.     server.mount('/', DispatchServlet, options)    
  68.     trap("INT") { server.shutdown }    
  69.     server.start    
  70.   end    
  71. end    
  72. # 输出启动提示  
  73. puts "=> Rails #{Rails.version} application starting on https://#{OPTIONS[:Host]}:#{OPTIONS[:port]}"    
  74. # 如果用户在命令行输入“-d”参数,则程序将在后台运行  
  75. if OPTIONS[:detach]    
  76.   Process.daemon    
  77.   pid = "#{RAILS_ROOT}/tmp/pids/server.pid"    
  78.   File.open(pid, 'w'){ |f| f.write(Process.pid) }    
  79.   at_exit { File.delete(pid) if File.exist?(pid) }    
  80. end    
  81. # 没有“-d”参数时在终端输出提示,此时可以通过“ctrl+c”关闭服务器  
  82. puts "=> Call with -d to detach"    
  83. trap(:INT) { exit }    
  84. puts "=> Ctrl-C to shutdown"    
  85. # 启动webrick服务器  
  86. SSLDispatchServlet.dispatch(OPTIONS)   

6. 将脚本参数设置为可执行

[c-sharp] view plaincopy
  1. chmod +x script/server_ssl  

7. 启动Ruby脚本

[c-sharp] view plaincopy
  1. ruby script/server_ssl -e production // 在终端运行  
  2. 或  

参考:

1. http://www.zunisoft.com/?p=740&cpage=1

2. (CentOS5)/usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb

你可以使用 Redmine Java API 来编一个 Java 脚本来创建 Redmine 项目。下面是一个简单的示例: ```java import com.taskadapter.redmineapi.RedmineException; import com.taskadapter.redmineapi.RedmineManager; import com.taskadapter.redmineapi.bean.Project; public class RedmineProjectCreator { public static void main(String[] args) throws RedmineException { // 创建 RedmineManager 对象 RedmineManager redmineManager = new RedmineManager("http://redmine.example.com", "your_api_key"); // 创建一个新项目对象 Project project = new Project(); project.setName("Project Name"); project.setIdentifier("project-identifier"); project.setDescription("Project Description"); project.setHomepage("http://project.example.com"); // 创建项目 Project createdProject = redmineManager.getProjectManager().createProject(project); // 输出创建的项目信息 System.out.println("Created project with ID: " + createdProject.getId()); System.out.println("Project name: " + createdProject.getName()); System.out.println("Project identifier: " + createdProject.getIdentifier()); System.out.println("Project description: " + createdProject.getDescription()); System.out.println("Project homepage: " + createdProject.getHomepage()); } } ``` 在这个示例中,我们使用 Redmine Java API 中的 `RedmineManager` 类来连接 Redmine 服务器,并使用 `Project` 类来表示要创建的项目。创建项目时,我们需要设置项目的名称、标识符、描述和主页等信息,并使用 `ProjectManager` 类的 `createProject()` 方法来创建项目。最后,我们输出创建的项目信息。 需要注意的是,在使用 Redmine Java API 之前,你需要先下载并导入 API 的 jar 包,具体方法可以参考 API 的官方文档。此外,还需要在 Redmine生成一个 API 密钥,用于连接 Redmine 服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值