繁体   English   中英

如何使用Powershell通过https将自签名证书发送给客户端

[英]How to send a self signed certificate to clients over https with powershell

我正在PowerShell中通过https协议创建REST api,以进行测试。 我的目的是创建一个伪https API并使用它来测试我们应用程序的功能(该应用程序需要调用我的测试https api)。 我可以使用以下代码创建自签名证书。

$hostIP = Get-NetIPAddress | where{ ($_.InterfaceAlias -in @('Mgmt', 'Ethernet', 'management')) -and ($_.AddressFamily -eq 'IPv4')}
$win_path= 'c:\my_temp\'

$Cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -   dnsname $hostIP.IPAddress -NotAfter (Get-Date).AddYears(2)
$Certname = $hostIP.IPAddress.Replace('.','_')
$pw = ConvertTo-SecureString -String "Pazzword" -Force -AsPlainText
$thumbprint = $Cert.Thumbprint
Export-PfxCertificate -cert cert:\localMachine\my\$thumbprint -FilePath 
$win_path\$Certname.pfx  -Force -Password $pw

我正在编写的REST API看起来像这样

$listener = New-Object System.Net.HttpListener
$httpUrl = "http://" + $givenArgs.HostName + ":" + $givenArgs.Port + "/"
Write-Output $httpUrl
$listener.Prefixes.Add($httpUrl) 
$httpsUrl = "https://" + $givenArgs.HostName + ":" + 443 + "/"
Write-Output $httpsUrl
$listener.Prefixes.Add($httpsUrl)
$listener.Start()

我的问题是,如果我手动安装在计算机中创建的证书,则能够成功地将查询发送到我的REST api,但只能从我的计算机发送。

我想将证书(在不使用任何CA的情况下向初始请求发送证书的副本)发送给客户端,以便当客户端第一次查询服务器时,它将获得证书的副本并可以保存以便进一步沟通。

我尝试过在线查找,但只能找到导致1.忽略证书或2.手动导入证书的解决方案,这不符合我的需要。

感谢您抽出宝贵的时间来研究此内容和您的帮助。 提前致谢。

您不必显式发送证书。 客户端每次访问https站点时,公钥证书始终随请求一起返回。 您遇到的问题是,此后,客户端必须决定如何处理证书。

客户端将首先查看证书,然后查看它是否受信任。 如果它是受信任的证书(即您购买了Verisign证书),则接受连接。 对于自签名证书,由于它们不受信任,因此客户端只有两个选项:

  1. 忽略证书来源并盲目连接
  2. 接受可以信任的来源并导入证书

您无法绕开这个基本事实。 自签名证书就像将带有炸弹形状的对象交付给客户端,上面贴有“不属于炸弹-相信我,我是@ user3543477”这样的标签,它们可以忽略该标签,也可以接受我可以信任@ user3543477。 未经他们的明确同意,您不能将包裹推过前门。 如果标贴上写着“不是炸弹-相信我,我已经被炸弹专家验证”,因为客户信任炸弹专家,那么客户将毫无疑问地接受该包裹。

自签名证书用于开发目的。 我不断地对人们说,不要尝试让他们工作,因为你做不到。

进行证书的正确方法是从Verisign之类获得适当的受信任证书,或者,我现在特别推荐为API量身定制的,是从Let's Encrypt获得免费证书。 这样,您将获得适当的受信任证书,并且无需处理自签名证书。

使用证书时,必须建立证书路径。 根CA证书自签名的。 重点是,他们事先被信任。

在已生成自签名证书的本地计算机上,该证书是受信任的。 其他机器将没有该证书:使它们信任您的证书

  • 通常必须将证书添加到您的“受信任的根证书”存储区(您的选项号2)。在该目录中,您的操作系统逻辑已添加了公共CA的自签名证书,或者
  • 即使存在不受信任的根,也必须信任证书路径(您的选项1。)

因此,基本上,您的选择就是您所总结的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM