我正在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.手动导入证书的解决方案,但这些服务不能满足我的需要。
感谢您抽出宝贵的时间来研究此内容和您的帮助。提前致谢。
答案 0 :(得分:2)
您不必显式发送证书。每次客户访问https
网站时,公钥证书始终随请求一起返回。您遇到的问题是,此后,客户端必须决定如何处理证书。
客户端将首先查看证书,并查看其是否受信任。如果它是受信任的证书(即您购买了Verisign证书),则接受连接。对于自签名证书,由于它们不受信任,因此客户端只有两个选项:
您无法绕开这个基本事实。自签名证书就像将带有炸弹形状的对象交付给客户端,上面贴有“不属于炸弹-相信我,我是@ user3543477”这样的标签,它们可以忽略该标签,也可以接受我可以信任@ user3543477。未经他们的明确同意,您不能将包裹推过前门。如果标贴上写着“不是炸弹-相信我,我已经被炸弹专家验证”,因为客户信任炸弹专家,那么客户将毫无疑问地接受该包裹。
自签名证书仅用于开发目的。我一直在对人们说,甚至不要尝试让他们工作,因为你做不到。
正确的证书制作方法是从Verisign之类获得适当的受信任证书,或者,我现在特别推荐针对API定制的是从{ {3}}。这样,您将获得适当的受信任证书,并且不会处理自签名证书。
答案 1 :(得分:0)
使用证书时,必须建立证书路径。 根CA证书 是自签名的。重点是,他们事先受到信任。
在已生成自签名证书的本地计算机上,该证书是受信任的。其他计算机将没有该证书:让它们信任您的证书
所以基本上,您的选择就是您所总结的。