当前位置: 首页 > 知识库问答 >
问题:

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

韦衡
2023-03-14

在构建我自己的事件机/瘦与SSL支持在Windows上(安装OpenSSL与Ruby事件机在Windows 7 x86)我得到了另一个问题与SSL证书:当我使用内置自签名一个瘦工作正常,但它不响应任何请求,而使用公司证书

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

  1. 我使用puttygen(ssl private.key)生成了私钥
  2. 我使用以下命令生成了CSR:

openssl请求输出ssl。csr-密钥ssl私有。键-新

openssl pkcs7-通知DER-外发PEM-在cert.p7b中-打印证书

这里会出什么问题?

我检查了什么:

openssl rsa-在ssl私有中。钥匙检查

显示“RSA密钥正常”

openssl x509-incert.crt-text-noout

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ***
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: ***
        Validity
            Not Before: Feb 16 08:47:25 2004 GMT
            Not After : Feb 16 08:55:36 2024 GMT
        Subject: ***
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ***
                Exponent: 3 (0x3)
        X509v3 extensions:
            X509v3 Key Usage: 
                Digital Signature, Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                ***
            1.3.6.1.4.1.311.21.1: 
                ...
    Signature Algorithm: sha1WithRSAEncryption
         ***

而在使用

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
         ***

好的一些变化:我已经改变了crt文件中的证书顺序,这样最终的证书不是最后一个,而是第一个,结果是不同的:chrome删除了一个错误的NET::ERR_CERT_INVALID,IE相似,两者都没有进一步导航

openssls_client输出(看起来还行,***根CA 1在窗口中是可信的):

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

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

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

没有tls它可以正常工作,tls浏览器不允许连接:(

根据http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#verify私钥和证书不匹配

共有1个答案

彭令秋
2023-03-14

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

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

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

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

 类似资料:
  • 我正在尝试学习自定义验证。下面是简单的代码: 当我试图通过rails控制台插入数据时, 2.3.0 :014 它让我插入数据。我应该做些什么来使我的自定义验证方法起作用?

  • 我正在尝试使用工作站上的Aptana Studio 3与Windows 2012服务器上托管的Bonobo Git repo通信。我遵循了无数使用开放SSL创建自签名SSL证书的指南,但仍然无法连接到Git repo。以下是我遵循的步骤: 从Win2012服务器中创建自签名SSL证书 失败后,我尝试按照此指南创建自己的证书颁发机构,但未能找到允许windows 2012服务器实际使用Bonobo

  • whistle会自动生成根证书,并根据根证书对每个请求动态生成https证书,如果需要用自定义的证书,甚至根证书,可以有两种方式(只支持 .crt 格式的证书): 把普通证书对 (如:test.crt 和 test.key、test2.crt 和 test2.key 等等) 或根证书 (名字必须为 root.crt 和 root.key),放在系统的某个目录,如 /data/ssl,并在启动时添加

  • Appium 的 iOS 版本的后端用的是Facebook's WebDriverAgent。该后端是基于苹果公司的 XCTest 框架,所以也有所有XCTest 框架已知的问题。其中有些问题我们正在设法解决,有一些在现阶段可能无法解决。本文中描述的方法已经能够使您完全掌握在设备上如何构建、管理和运行WDA。通过这种方式,您可以在CI环境中对您的自动化测试进行微调,并使其在长期运行的情况下更加稳定

  • svnserve,一个自定义的服务器 svnserve是一个轻型的服务器,可以同客户端通过在TCP/IP基础上的自定义有状态协议通讯,客户端通过使用开头为svn://或者svn+ssh://svnserve的URL来访问一个svnserve服务器。这一小节将会解释运行svnserve的不同方式,客户端怎样实现服务器的认证,怎样配置版本库恰当的访问控制。 调用服务器 有许多不同方法运行svnserv

  • 我目前刚开始使用Python中的Apache Beam和Dataflow Runner。我对创建一个发布到Google Cloud PubSub的批处理管道感兴趣,我对Beam Python API进行了修补,并找到了一个解决方案。然而,在我的探索中,我遇到了一些有趣的问题,让我好奇。 在这里,我试图使发布服务器共享accross。我尝试了以下方法。 a.在DoFn中初始化publisher b.