我在服务器上有一个文件,我正在尝试阅读它。 我的代码如下:
package require http
package require twapi_crypto
http::register https 443 [list ::twapi::tls_socket]
set token [http::geturl "https://$ipaddress/filename"]
set status [http::status $token]
set data [http::data $token]
put $data
我收到以下错误:
The target principal name is incorrect
while executing
"InitializeSecurityContext $Credentials $Handle $Target $Inattr 0 $Datarep $inbuflist 0"
(procedure "sspi_step" line 16)
invoked from within
"sspi_step $SpiContext $data"
(procedure "_negotiate2" line 19)
invoked from within
"_negotiate2 $chan"
(procedure "rethrow" line 2)
invoked from within
"rethrow"
invoked from within
"trap {
_negotiate2 $chan
} onerror {} {
variable channels
if {[info exists _channels($chan)]} {
dict set _chan..."
(procedure "_negotiate line 3)
invoked from within
"_negotiate $chan"
(procedure "::twapi::tls::_so_write_andler" line12)
invoked from within
"::twapi::tls::_so_write_handle rc0"
有人可以将问题重定向到我这里吗?当我尝试访问该文件时,我收到来自IE的警告,即使我已将证书添加到浏览器,也必须单击“继续”,这是在Windows机器上运行。
答案 0 :(得分:0)
我猜测证书上的主题公共名称与您传入的IP地址不匹配,这是预期的。打开HTTPS连接时,您必须使用主机名称。
# Use the right hostname of course
set hostname "securetesting.example.com"
set token [http::geturl "https://$hostname/filename"]
这是因为该名称用于确定您连接的服务器是否是您要求连接的服务器。没有它,它可以是绝对任何的安全连接,这不是一种有用的安全性!是的,这意味着您需要花一些时间将DNS作为部署的一部分,并且是的,这有点痛苦。安全通常是。
有趣的是,即使使用普通的未加密HTTP,您也应该正确地提供主机名,因为服务器可以托管多个站点。你唯一能够解决这个问题的方法就是在未加密的情况下与仅提供单个站点的服务器进行交谈;多年来,网络并没有真正发挥作用。