Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails windows上的瘦rails服务器/eventmachine不能与自定义证书一起使用_Ruby On Rails_Windows_Ssl_Eventmachine - Fatal编程技术网

Ruby on rails windows上的瘦rails服务器/eventmachine不能与自定义证书一起使用

Ruby on rails windows上的瘦rails服务器/eventmachine不能与自定义证书一起使用,ruby-on-rails,windows,ssl,eventmachine,Ruby On Rails,Windows,Ssl,Eventmachine,在windows()上使用SSL支持构建了自己的eventmachine/thin之后,我遇到了SSL证书的另一个问题:当我使用内置自签名时,一个thin可以正常工作,但在使用公司证书时它不会响应任何请求 以下是我获取证书的路径: 我使用puttygen生成了私钥(ssl private.key) 我使用以下命令生成了CSR: openssl req-out ssl.csr-key ssl-private.key-new 我将CSR发送到CA并收到P7B文件 我使用以下命令转换了P7B: ope

在windows()上使用SSL支持构建了自己的eventmachine/thin之后,我遇到了SSL证书的另一个问题:当我使用内置自签名时,一个thin可以正常工作,但在使用公司证书时它不会响应任何请求

以下是我获取证书的路径:

  • 我使用puttygen生成了私钥(ssl private.key)
  • 我使用以下命令生成了CSR:
  • openssl req-out ssl.csr-key ssl-private.key-new

  • 我将CSR发送到CA并收到P7B文件
  • 我使用以下命令转换了P7B:
  • openssl pkcs7-通知DER-外发PEM-在cert.p7b中-打印证书>cert.crt

    这里会出什么问题


    我检查了什么:

    openssl rsa-在ssl-private.key中-检查

    显示“RSA密钥正常”

    openssl x509-in cert.crt-text-noout

    而在使用

    openssl genrsa -des3 -out server.orig.key 2048
    openssl rsa -in server.orig.key -out server.key
    openssl req -new -key server.key -out server.csr
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    


    确定一些更改:我更改了crt文件中的证书顺序,以便最终证书不是最后一个,而是第一个,结果不同:chrome会删除一个错误NET::ERR_cert_INVALID,即类似,并且两者都不会进一步导航

    openssl s_客户端输出(看起来正常,***根CA 1在windows中受信任):

    我制作了一个简单的https服务器(lib/emtestssl):

    需要“rubygems”
    需要“捆绑机/设置”
    捆绑机
    类ServerHandler'private.key',:cert\u chain\u file=>'comb.crt',:verify\u peer=>false
    结束
    def接收_数据(数据)
    将“接收到的数据放入服务器:#{data}”
    发送数据(“HTTP/1.1 200 OK\n\nHello world!”)
    写入后关闭\u连接\u
    结束
    结束
    EventMachine.rundo
    放置“正在启动服务器…”
    EventMachine.start_服务器('145.245.202.233',443,ServerHandler)
    结束
    
    没有tls它可以正常工作,tls浏览器不允许连接:(


    根据私钥和证书do match

    的说法,似乎(修补过的)eventmachine完全正常:我从现有服务器上获取了密钥/证书对,并且(在浏览器发出url不匹配警告后)它工作正常

    在比较证书之后,我的CA似乎失败了,给我带来了一个属性错误的证书:工作证书被描述为服务器身份验证(1.3.6.1.5.5.7.3.1),而失败证书是客户端身份验证(1.3.6.1.5.5.7.3.2)

    我将发布另一个csr,并向他们收取损失日的费用…:/

    也许一个重要的发现是证书文件中证书的顺序:必须从最终证书到链末端的根证书

    openssl genrsa -des3 -out server.orig.key 2048
    openssl rsa -in server.orig.key -out server.key
    openssl req -new -key server.key -out server.csr
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    
    Certificate:
        Data:
            Version: 1 (0x0)
            Serial Number:
                ***
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: C=PL, ST=-, O=Internet Widgits Pty Ltd, CN=test.org
            Validity
                Not Before: Jun 24 14:42:07 2015 GMT
                Not After : Jun 23 14:42:07 2016 GMT
            Subject: C=PL, ST=-, O=Internet Widgits Pty Ltd, CN=test.org
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (2048 bit)
                    Modulus:
                        ***
                    Exponent: 65537 (0x10001)
        Signature Algorithm: sha256WithRSAEncryption
             ***
    
    Loading 'screen' into random state - done
    CONNECTED(000001E8)
    depth=1 DC = com, DC = ***, CN = *** Enterprise CA 1
    verify error:num=20:unable to get local issuer certificate
    ---
    Certificate chain
     0 s:/C=***/ST=***/O=***/CN=***.com
       i:/DC=com/DC=***/CN=*** Enterprise CA 1
     1 s:/DC=com/DC=***/CN=*** Enterprise CA 1
       i:/DC=com/DC=***/CN=*** Root CA 1
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    ***
    -----END CERTIFICATE-----
    subject=/C=***/ST=***/O=***/CN=***.com
    issuer=/DC=com/DC=***/CN=*** Enterprise CA 1
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 3404 bytes and written 665 bytes
    ---
    New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : AES256-GCM-SHA384
        Session-ID: ***
        Session-ID-ctx:
        Master-Key: ***
        Key-Arg   : None
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 300 (seconds)
        TLS session ticket: ***
    
        Start Time: 1435319943
        Timeout   : 300 (sec)
        Verify return code: 20 (unable to get local issuer certificate)
    ---
    read:errno=0
    
    require 'rubygems'
    require 'bundler/setup'
    Bundler.require
    
    class ServerHandler < EM::Connection
      def post_init
        puts "post_init"
        start_tls :private_key_file => 'private.key', :cert_chain_file => 'comb.crt', :verify_peer => false
      end
    
      def receive_data(data)
        puts "Received data in server: #{data}"
        send_data("HTTP/1.1 200 OK\n\nHello world!")
        close_connection_after_writing
      end
    end
    
    EventMachine.run do
      puts 'Starting server...'
      EventMachine.start_server('145.245.202.233', 443, ServerHandler)
    end