Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Https 如何在dart中创建安全的http服务器?_Https_Dart - Fatal编程技术网

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

Https 如何在dart中创建安全的http服务器?,https,dart,Https,Dart,我正在尝试将dart http服务器设置为仅使用https运行。所以我想我需要使用,但从描述中我不清楚什么需要作为certificateName传递,以及requestClientCertificate为true是否会使其更安全,或者对安全性没有影响。在certificateName:'localhost\u cert'中,位于通道顶部的小示例代码,但在此之前,它对数据库做了一些操作,但似乎没有在任何情况下使用它。有人能更详细地解释这些值是什么以及它们需要是什么才能使它们安全吗?的参数用于指定客

我正在尝试将dart http服务器设置为仅使用https运行。所以我想我需要使用,但从描述中我不清楚什么需要作为
certificateName
传递,以及
requestClientCertificate
为true是否会使其更安全,或者对安全性没有影响。在
certificateName:'localhost\u cert'
中,位于通道顶部的小示例代码,但在此之前,它对数据库做了一些操作,但似乎没有在任何情况下使用它。有人能更详细地解释这些值是什么以及它们需要是什么才能使它们安全吗?

的参数用于指定客户端证书。服务器使用客户端证书来识别和授权客户端,这似乎不是本问题的目的。应该注意的是,在IE9和Windows 7上,在Dart中使用客户端证书有一个缺点

该参数用于指定证书数据库中存在的证书的昵称。使用将证书导入数据库时,可以使用
-n
选项指定证书昵称

请使用以下步骤:

  • 安装NSS实用程序(包括certutil)

  • 使用密码在目录
    中创建一个新的证书数据库,然后

  • 导入由昵称
    标识的自签名或购买的证书,以便使用以下示例代码将其用于创建HTTPS服务器。虽然昵称可以任意选择,但在本例中我们使用主机名。这些步骤已经在Ubuntu 14.04和Dart SDK 1.6到(目前最新稳定版本)1.8.3中得到确认

  • 安装NSS实用程序
    sudo apt get安装libnss3工具

  • cd到将包含您的证书数据库的目录
    cd

  • 创建用于证书数据库的密码文件:
    echo”“>pwdfile

  • 创建证书数据库
    certutil-N-d'sql:./'-f pwdfile

  • 要么:

    • 生成自签名证书:

      certutil-S-S“cn=“-n”自签名用于dart“-x-t”C,C,C“-m 1000-v 120-d”sql:./“-k rsa-g 2048-f pwdfile

      其中,
      是要为其生成证书的主机(“通用名称”),例如“localhost”

    • 或者,通过首先为真实域创建签名请求来购买证书,例如“myhost.com”:

      certutil-R-s“CN=,O=None,L=圣地亚哥,ST=California,C=US”-a-g 2048-O.csr-d“sql:/”

      然后,当从签名机构购买证书时提示输入csr时,指定文件
      .csr的内容

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

      将证书导入数据库
      certutil-A-n-t“p,p,p”-i.crt-d”sql:./“

      如果需要使用中间证书,可以这样导入:
      certutil-A-nMy\u intermediate\u certificate-t“p,p,p”-i intermediate.crt-d“sql:/”

      其中“intermediate.crt”是从签名机构下载的中间证书文件

  • 验证数据库中是否存在证书

    certutil-L-n-d“sql:./”

    certutil-L-n我的中间证书-d“sql:./”

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

//初始化安全套接字以使用证书数据库(注意:替换``
//具有证书数据库目录的绝对路径,以及``
//使用上面选择的值)
SecureSocket.initialize(数据库:“”,密码:“”);
//将安全HTTP服务器绑定到指定的主机和端口(通常为443)
HttpServer.bindSecure(“,443,certificateName:”)
.然后((HttpServer HttpServer){
//侦听传入的请求
侦听((HttpRequest-HttpRequest){
//TODO:处理请求
});
})
.catchError((错误){
//TODO:句柄错误
});
更新


我没有足够的信誉点来回应这些评论,因此这里有一些额外的细节可以帮助回答这些问题:客户端证书不用于加密客户端-服务器通信,在通过HTTPS在web浏览器和web服务器之间建立安全通信的常见场景中也不需要。上面概述的步骤显示了如何使用Dart创建HTTPS服务器。

本期包含有关此主题的多个链接,可能会提供有用的信息。谢谢,此链接非常有用,它来自第一条评论中链接的对话,我希望这是最接近我的直接答案,尽管这是一篇好文章,不管怎样。当你想添加CA证书时,我制作本教程只是为了注意,在你关于IE9上dart中存在已知错误的第一段中,我相信dart只支持IE10+,所以这不是真正的错误,只是不支持“服务器使用客户端证书来识别和授权客户端,这似乎不是这个问题的目的。”-我想要实现的是,客户端和服务器之间的所有通信都通过https加密,而不是通过普通http加密。如果我对识别和授权客户不感兴趣,我还需要对证书数据库执行此过程吗?或者,这是通过https实现COM的先决条件吗?谢谢您的更新,那么如果您只是希望服务器只使用https而不是http,您会怎么做?或者这不是一种选择?我只希望我的服务器只接受https in并以https out响应。调用创建https服务器(仅限)。服务器不会响应HTTP请求,除非同时调用。