帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:libressl  Privilege  Openssl  
privilege separation engine for OpenSSL / LibreSSL

  • 源代码名称:neverbleed
  • 源代码网址:http://www.github.com/h2o/neverbleed
  • neverbleed源代码文档
  • neverbleed源代码下载
  • Git URL:
    git://www.github.com/h2o/neverbleed.git
  • Git Clone代码到本地:
    git clone http://www.github.com/h2o/neverbleed
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/h2o/neverbleed
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Neverbleed

    Neverbleed是一个 OpenSSL引擎在独立进程中运行 RSA private 关键操作,从而减少了在诸如 Heartbleed这样的漏洞时 private 密钥泄漏的风险。

    引擎与现有的OpenSSL或者LibreSSL的版本一起工作,最小化服务器源代码。

    常见问题解答

    ,开销是多少?

    实际上没有。

    一般来说,private 关键操作比内部进程通信的开销要大得多。 如果你使用的是 privilege @ 2.4,则在第2 版中,没有特权分离进程的OpenSSL 1.0.2会每秒握手一次,而拥有特权分离进程的OpenSSL将每秒握手一次( 注: RSA密钥长度:2,048位,选择的密码套件: ECDHE-RSA-AES128-GCM-SHA256 ) 。

    Q 。为什么库只保护 private 键?

    因为 private 密钥是唯一一个用于加密和/或者数字签名通信的长期密钥。

    根据OpenSSL的使用方式,将对称密码操作或者TLS操作作为整体进行分离可能有好处。 但是即使是这样,最好还是将 private 关键操作隔离起来,考虑到 private 密钥泄漏的影响。 换句话说,只要将 private 密钥操作分离到一个独立的过程中,总是一件很好的事情。

    Q 是否存在使用Neverbleed的HTTP服务器?

    Neverbleed由 H2O HTTP2服务器使用自版本 1.5.0 -beta4.

    如何

    库公开两个函数: neverbleed_initneverbleed_load_private_key_file

    第一个函数产生专门用于 private 密钥操作的外部进程,第二个函数将存储在指定文件中的RSA private 密钥分配给现有的SSL上下文( SSL_CTX ) 。

    • 添加对 neverbleed_init的调用
    • neverbleed_load_private_key_file 替换对 SSL_CTX_use_PrivateKey_file的调用

    特权分离引擎将用于所有传入的TLS连接。

     neverbleed_t nb;
     char errbuf[NEVERBLEED_ERRBUF_SIZE];
    /* initialize the OpenSSL library and the neverbleed engine */
     SSL_load_error_strings();
     SSL_library_init();
     OpenSSL_add_all_algorithms();
     if (neverbleed_init(&nb, errbuf)!= 0) {
     fprintf(stderr,"neverbleed_init failed: %sn", errbuf);
    . . .
     }
    . . .
    /* load certificate chain and private key */
     if (SSL_CTX_use_certificate_chain_file(ssl_ctx, certchain_fn)!= 1) {
     fprintf(stderr,"failed to load certificate chain file:%sn", certchain_fn);
    . . .
     }
     if (neverbleed_load_private_key_file(&nb, ctx, privkey_fn, errbuf)!= 1) {
     fprintf(stderr,"failed to load private key from file:%s:%sn", privkey_fn, errbuf);
    . . .
     }

    这里外,neverbleed_setuidgid 函数可以用于在完成加载所有 private 密钥之后,删除守护进程的特权。



    文章标签:Openssl  Privilege  libressl  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语