IOSCertEnrollment - рубиновый гем для iOS SCEP, как запустить это на локальном хосте? - PullRequest
0 голосов
/ 31 октября 2018

Так что это драгоценный камень rails для iOS SCEP , в этом коде библиотеки есть пример, а также примеры запускаются с использованием webrick и sinatra, я создал самозаверяющий SSL-сертификат для общего имени (CN) localhost, я могу получить к нему доступ проект на моей машине, но не могу получить доступ с использованием публичного IP-адреса моей машины.

Используя терминал (внутри примера проекта) я запускаю как $ ruby ​​application.rb

код application.rb, как показано ниже

require 'rubygems'
require 'sinatra'
require 'ios-cert-enrollment'

require 'sinatra/base'
require 'webrick'
require 'webrick/https'
require 'openssl'

IOSCertEnrollment.configure do |config|
  config.ssl_certificate_path = "./ssl_cert/server.crt"
  config.ssl_key_path = "./ssl_cert/server.key"
  config.base_url = "192.168.100.48"
  config.identifier = "192.168.100.48"
  config.display_name = "iOS Enrollment Server"
  config.organization = "Nolan Brown"
end

webrick_options = {
        :Port               => 3001,
        :Logger             => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG),
        :DocumentRoot       => "/ruby/htdocs",
        :DoNotReverseLookup => false,
        :SSLEnable          => true,
        :SSLVerifyClient    => OpenSSL::SSL::VERIFY_NONE,
        :SSLCertificate     => IOSCertEnrollment::SSL.certificate,
        :SSLPrivateKey      => IOSCertEnrollment::SSL.key,
        :SSLCertName        => [ [ "CN",WEBrick::Utils::getservername ] ]
}

class MyServer < Sinatra::Base

  get '/' do
    '<a href="/enroll">Enroll</a>'
  end

  get '/enroll' do 
    signed_certificate = IOSCertEnrollment::Profile.new("/profile").service().sign()

    ## Send
    content_type signed_certificate.mime_type
    signed_certificate.certificate  

  end

  post '/profile' do  
    p7sign = IOSCertEnrollment::Sign.verify_response(request.body.read)
    if IOSCertEnrollment::Sign.verify_signer(p7sign)

      profile = IOSCertEnrollment::Profile.new()
      profile.icon = File.open(File.expand_path('<PATH TO YOUR ICON>', __FILE__))
      profile.display_name = "iOS Enrollment Server"
      profile.description = "Easy access to web"
      profile.label = "iOS Enrollment"
      profile.url = "<URL FOR WEBCLIP>"
      encrypted_profile = profile.webclip().encrypt(p7sign.certificates)
      signed_profile = profile.configuration(encrypted_profile.certificate).sign()

    else
      # Get returned device attributes
      device_attributes = IOSCertEnrollment::Device.parse(p7sign)  

      # "UDID", 
      # "VERSION",
      # "PRODUCT",          
      # "DEVICE_NAME",
      # "MAC_ADDRESS_EN0",
      # "IMEI",
      # "ICCID"

      ## Validation
      profile = IOSCertEnrollment::Profile.new("/scep")
      signed_profile = profile.encrypted_service().sign()

    end
    ## Send 
    content_type signed_profile.mime_type
    signed_profile.certificate

  end

  get '/scep' do
    case params['operation']
    when "GetCACert"
      registration_authority = IOSCertEnrollment::Sign.registration_authority
      content_type registration_authority.mime_type
      registration_authority.certificate

    when "GetCACaps" 
      content_type "text/plain"
      IOSCertEnrollment::Sign.certificate_authority_caps
    else
      "Invalid Action"
    end
  end

  post '/scep' do
    if params['operation'] == "PKIOperation"
      signed_pki = IOSCertEnrollment::Sign.sign_PKI(request.body.read)

      content_type signed_pki.mime_type
      signed_pki.certificate

    else
      "Invalid Action"
    end
  end      
end

Rack::Handler::WEBrick.run MyServer, webrick_options

Примечание. Код application.rb такой, какой он приведен в примере проекта с этой библиотекой, единственное, что я изменяю / помещаю, это путь к библиотеке SSL.

Мой вопрос -

1) возможно ли протестировать SCEP с использованием localhost?

2) если возможно, как я могу получить доступ к localhost, используя IP-адрес

...