gpt4 book ai didi

https - 如何在 dart 中创建安全的 http 服务器?

转载 作者:行者123 更新时间:2023-12-02 01:42:57 24 4
gpt4 key购买 nike

我正在尝试将我的 dart http 服务器设置为仅使用 https 运行。所以我想我需要使用 HttpServer.bindSecure 但我从描述中不清楚需要作为 certificateName 传入的内容以及是否requestClientCertificate为 true 使其或多或少安全,或者对安全性没有任何影响。 HttpServer page顶部的小示例代码传入 certificateName: 'localhost_cert'但在此之前它对数据库做了一些事情,但似乎并没有使用它。谁能更详细地解释这些值是什么以及它们需要什么才能使它们安全?

最佳答案

requestClientCertificate bindSecure的参数用于指定客户端证书。服务器使用客户端证书来识别和授权客户端,这似乎不是这个问题的目标。需要注意的是,这里有一个known issue在 IE9 和 Windows 7 上的 Dart 中使用客户端证书。

certificateName参数用于指定证书数据库中存在的证书的昵称。您可以使用 -n <nickname> 指定证书昵称。使用 certutil 将证书导入数据库时​​的选项.

使用以下步骤:

  • 安装 NSS 实用程序(包括 certutil),
  • 在目录 <dir> 中创建一个新的证书数据库带密码 <password> , 和
  • 导入由昵称标识的自签名或购买的证书 <host>这样它就可以用于使用以下示例代码创建 HTTPS 服务器。虽然昵称可以任意选择,但我们在这个例子中使用主机名。这些步骤已在 Ubuntu 14.04 和 Dart SDK 1.6 到(目前最新的稳定版本)1.8.3 中得到确认。
  • 安装 NSS 实用程序sudo apt-get install libnss3-tools
  • cd 到将包含您的证书数据库的目录cd <dir>
  • 创建用于证书数据库的密码文件:echo "<password>" > pwdfile
  • 创建证书数据库certutil -N -d 'sql:./' -f pwdfile
  • 任何一个:
  • 生成自签名证书:
    certutil -S -s "cn=<host>" -n "self signed for dart" -x -t "C,C,C" -m 1000 -v 120 -d "sql:./" -k rsa -g 2048 -f pwdfile
    哪里<host>是为其生成证书的主机(“通用名称”),例如“localhost”
  • 或者,通过首先为真实域创建签名请求来购买证书 <host> ,例如“myhost.com”:
    certutil -R -s "CN=<host>, O=None, L=San Diego, ST=California, C=US" -a -g 2048 -o <host>.csr -d "sql:./"
    然后指定文件<host>的内容.csr 在从签名机构购买证书时提示输入 CSR 时。

    将购买的证书复制到名为 <host> 的文件中.crt

    将证书导入数据库certutil -A -n <host> -t "p,p,p" -i <host>.crt -d "sql:./"
    如果需要使用中间证书,可以这样导入:certutil -A -n my_intermediate_certificate -t "p,p,p" -i intermediate.crt -d "sql:./"其中“intermediate.crt”是从签名机构下载的中间证书文件。
  • 验证证书是否存在于数据库中
    certutil -L -n <host> -d "sql:./"certutil -L -n my_intermediate_certificate -d "sql:./"

  • 要使用此证书并创建 HTTPS 服务器,请执行以下操作:

    // Initialize secure socket to use certificate database (note: replace `<dir>`
    // with the absolute path to the certificate database directory, and `<password>`
    // with the value chosen above)
    SecureSocket.initialize(database: "<dir>", password: "<password>");

    // Bind secure HTTP server to specified host and port (typically 443)
    HttpServer.bindSecure("<host>", 443, certificateName: "<host>")
    .then((HttpServer httpServer) {

    // Listen for incoming requests
    httpServer.listen((HttpRequest httpRequest) {

    // TODO: process request
    });
    })
    .catchError((error) {

    // TODO: handle error
    });

    更新

    我没有足够的信誉点来回复评论,所以这里有一些额外的细节可以帮助回答这些问题:网络浏览器和网络服务器通过 HTTPS。上面概述的步骤显示了如何使用 bindSecure 在 Dart 中创建 HTTPS 服务器。 .

    关于https - 如何在 dart 中创建安全的 http 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402679/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com