golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
740 B
35 lines
740 B
// Package tls contains TLS utilities. |
|
package tls |
|
|
|
import ( |
|
"crypto/sha256" |
|
"crypto/tls" |
|
"encoding/hex" |
|
"fmt" |
|
"strings" |
|
) |
|
|
|
// ConfigForFingerprint returns a tls.Config that supports given fingerprint. |
|
func ConfigForFingerprint(fingerprint string) *tls.Config { |
|
if fingerprint == "" { |
|
return nil |
|
} |
|
|
|
fingerprintLower := strings.ToLower(fingerprint) |
|
|
|
return &tls.Config{ |
|
InsecureSkipVerify: true, |
|
VerifyConnection: func(cs tls.ConnectionState) error { |
|
h := sha256.New() |
|
h.Write(cs.PeerCertificates[0].Raw) |
|
hstr := hex.EncodeToString(h.Sum(nil)) |
|
|
|
if hstr != fingerprintLower { |
|
return fmt.Errorf("source fingerprint does not match: expected %s, got %s", |
|
fingerprintLower, hstr) |
|
} |
|
|
|
return nil |
|
}, |
|
} |
|
}
|
|
|