今天在做一个小项目,在这当中我要启动一个自制的简单的 HTTPS 服务器 (没用 Rack 服务器),当然我是肯定没有证书或密钥的,对此我使用了 WEBrick 自带的工具,WEBrick::Utils.create_self_signed_cert
,代码如下:
servers = WEBrick::Utils.create_listeners nil, 443
cn = [['CN', 'localhost']]
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.cert, ssl_context.key = WEBrick::Utils.create_self_signed_cert(1024, cn, 'Generated by Bachue')
ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
但奇怪的是,用这个方法伪造的证书密钥,用curl -k
总是有效的。但如果用 Chrome/Firefox 的话,就很奇葩了,有时候无论怎么样都不会有问题,如果通过本机的 domain name 访问也通常不会有问题,但如果用 localhost 访问,尤其是服务器刚启动就用 localhost 访问,就可能会出现 in `accept': SSL_accept returned=1 errno=0 state=SSLv3 read client certificate A: sslv3 alert bad certificate (OpenSSL::SSL::SSLError) 这样的错误,实在太奇怪了。大家遭遇过类似的问题吗?如何解决?谢谢。