Ssl OpenVAS Go TLS证书错误

Ssl OpenVAS Go TLS证书错误,ssl,go,tls1.2,gnutls,openvas,Ssl,Go,Tls1.2,Gnutls,Openvas,我目前正在为OpenVAS开发一个自定义扫描仪。问题是与自定义服务器的握手失败 我从GNUTLS\u握手中追踪到错误-73:GNUTLS\u E\u ASN1\u TAG\u错误,但我找不到有关该问题的任何资源。我读到一些关于证书不正确的信息,但是除了重新生成OpenVAS证书之外,我什么也做不了。go服务器中的tls功能只使用一个简单的listendServeTls,并获取服务器证书和密钥 编辑: 这是自定义扫描仪上的相关网络部分: var ( port = ":1234" c

我目前正在为OpenVAS开发一个自定义扫描仪。问题是与自定义服务器的握手失败

我从
GNUTLS\u握手
中追踪到错误
-73
GNUTLS\u E\u ASN1\u TAG\u错误
,但我找不到有关该问题的任何资源。我读到一些关于证书不正确的信息,但是除了重新生成OpenVAS证书之外,我什么也做不了。go服务器中的tls功能只使用一个简单的
listendServeTls
,并获取服务器证书和密钥

编辑: 这是自定义扫描仪上的相关网络部分:

var (
    port = ":1234"
    cert = "/usr/local/var/lib/openvas/CA/servercert.pem"
    ca   = "/usr/local/var/lib/openvas/CA/cacert.pem"
    key  = "/usr/local/var/lib/openvas/private/CA/serverkey.pem"
)

    func start_server() {

    ca_file, err := ioutil.ReadFile(ca)

    if err != nil {
        panic(err)
    }

    blocks, _ := pem.Decode( ca_file )
    ca, err := x509.ParseCertificate(blocks.Bytes)

    if err != nil {
        panic(err)
    }

    priv_file, _ := ioutil.ReadFile(key)
    blocks2, _ := pem.Decode( priv_file )

    priv, err := x509.ParsePKCS1PrivateKey(blocks2.Bytes)

    if err != nil {
        panic(err)
    }

    pool := x509.NewCertPool()
    pool.AddCert(ca)

    cert := tls.Certificate{
        Certificate: [][]byte{ca_file},
        PrivateKey:  priv,
    }

    config := tls.Config{
        ClientAuth:   tls.RequireAndVerifyClientCert,
        Certificates: []tls.Certificate{cert},
        ClientCAs:    pool,
    }
    config.Rand = rand.Reader
    service := "0.0.0.0" + port
    listener, err := tls.Listen("tcp", service, &config)

    if err != nil {
        log.Fatalf("server: listen: %s", err)
    }
    log.Print("server: listening")

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Printf("server: accept: %s", err)
            break
        }

        defer conn.Close()
        log.Printf("server: accepted from %s", conn.RemoteAddr())
        go handle(conn)
    }
}
func句柄(conn net.conn){

}

func main(){

}


它取自一个示例,但一开始工作不正常(在解析证书之前没有解码)。可能是因为这个原因,现在证书的格式不正确?在添加两个解码之前,我有一个关于asn1标记不匹配的类似错误。还有一个asn1错误。我曾想过生成自己的证书,但我不知道这是否会破坏其他扫描仪的OpenVAS。在使用go的ListendServetls时,我得到了相同的结果。这个错误肯定是在gnutls_握手中产生的。令人沮丧的是,我只得到了一个错误代码。

请考虑添加一些你正在做的示例代码,而不是仅仅描述它。通常情况下,错误存在于细微的实现问题中,如果您发布代码,这些问题更容易解决。请提供服务器的URL以及一些代码。GnuTLS的ASN.1解析器非常严格。我似乎想起了一种在解析过程中让它放松的方法,但现在我想不起来了。您可能能够找到问题和解决方案的参考;或者换一个图书馆。
str := "Hello"

defer conn.Close()

buf := make([]byte, 512)
for {
    log.Print("server: conn: waiting")
    conn.Write( ([]byte)(str) )
    n, err := conn.Read(buf)
    if err != nil {
        if err != nil {
            fmt.Println (err)
        }
        break
    }

    tlscon, ok := conn.(*tls.Conn)
    if ok {
        state := tlscon.ConnectionState()
        sub := state.PeerCertificates[0].Subject
        log.Println(sub)
    }

    log.Printf("server: conn: echo %q\n", string(buf[:n]))
    n, err = conn.Write(buf[:n])

    n, err = conn.Write(buf[:n])
    log.Printf("server: conn: wrote %d bytes", n)

    if err != nil {
        log.Printf("server: write: %s", err)
        break
    }
}
log.Println("server: conn: closed")
start_server()