我们正在 Golang 中构建一个服务器,它通过 SSL 打开一个 TCP 端口。
我们希望在客户端和服务器之间启用相互身份验证。但还要检测客户端何时在没有有效客户端证书的情况下尝试连接到我们的服务器,并通过 SSL 向他们返回错误消息 - 例如“检测到无效的客户端证书,请联系 ABC 公司寻求帮助”。
需要明确的是:我们坚持要求通过 SSL 将数据返回给无法与服务器进行相互验证的客户端。我们不想断开它们。
我们采用的方法是使用 TLS 的“VerifyClientCertIfGiven”配置设置。
因此,如果提供了客户端证书,我们将对其进行验证,但如果没有,我们仍然允许建立 SSL 连接。
我们怎样才能知道:
下面是我们服务器的代码:
package main
import(
"fmt"
"io/ioutil"
"crypto/tls"
"crypto/x509"
)
func main(){
// Configure SSL
cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
caCert, _ := ioutil.ReadFile("client.crt")
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
config := &tls.Config{
Certificates: []tls.Certificate{cert},
ClientCAs: caCertPool,
ClientAuth: tls.VerifyClientCertIfGiven,
}
config.BuildNameToCertificate()
// Listen on port 443
listener, _ := tls.Listen("tcp", ":443", config)
defer listener.Close()
// …Run Code Online (Sandbox Code Playgroud) 将字节数组编码为base64字节数组时,以下代码会产生运行时index out of range错误.怎么解决这个问题?
package main
import (
"fmt"
"encoding/base64"
)
func main() {
data := []byte("string of data")
var encodedData []byte
base64.StdEncoding.Encode(encodedData, data)
fmt.Println(encodedData)
}
Run Code Online (Sandbox Code Playgroud)
我有一个包含名为 的文件的包test,位于文件夹中~/my_packages/test。
我的 GoPath 设置为~/go,即
$ echo $GOPATH
~/go
Run Code Online (Sandbox Code Playgroud)
需要传递哪些参数才能godoc查看包的文件文档test?
我努力了:
godoc -goroot=~/my_packages test
cannot find package "." in: /src/testgodoc -goroot=~/my_packages ./test
cannot find package "." in: /targetexport GOPATH=$GOPATH:~/my_packages; godoc test
cannot find package "." in: /src/test我可以启动 godoc HTTP 服务器并查看该文件夹,但只有代码可见。预期的包文档不可用。
godoc -http=:6060 -goroot=/full/path/to/my_packages
Run Code Online (Sandbox Code Playgroud)
godoc可以运行什么命令来为任何目录中的文件夹中的包生成文档?
预先感谢您的帮助!
搜索了各种 文章之后,我无法vertical-align: middle在div中工作。
所期望的结果是什么,都float: left存在于div属性中:
________ _______
| | | |
| lorem | | ipsum |
|________| |_______|
.tile {
float: left;
width: 50%;
min-height: 50px;
text-align: center;
background-color: blue;
}
#nav {
display: table;
}
.middle {
display: table-cell;
vertical-align: middle;
background-color: red;
}Run Code Online (Sandbox Code Playgroud)
<div class="tile" id="nav">
<div class="tile middle">lorem</div>
<div class="tile">ipsum</div>
</div>Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?除非像本文中所述是不可能的。