config_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package tls_test
  2. import (
  3. gotls "crypto/tls"
  4. "crypto/x509"
  5. "testing"
  6. "time"
  7. "v2ray.com/core/common"
  8. "v2ray.com/core/common/protocol/tls/cert"
  9. . "v2ray.com/core/transport/internet/tls"
  10. . "v2ray.com/ext/assert"
  11. )
  12. func TestCertificateIssuing(t *testing.T) {
  13. assert := With(t)
  14. certificate := ParseCertificate(cert.MustGenerate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageCertSign)))
  15. certificate.Usage = Certificate_AUTHORITY_ISSUE
  16. c := &Config{
  17. Certificate: []*Certificate{
  18. certificate,
  19. },
  20. }
  21. tlsConfig := c.GetTLSConfig()
  22. v2rayCert, err := tlsConfig.GetCertificate(&gotls.ClientHelloInfo{
  23. ServerName: "www.v2ray.com",
  24. })
  25. common.Must(err)
  26. x509Cert, err := x509.ParseCertificate(v2rayCert.Certificate[0])
  27. common.Must(err)
  28. assert(x509Cert.NotAfter.After(time.Now()), IsTrue)
  29. }
  30. func TestExpiredCertificate(t *testing.T) {
  31. assert := With(t)
  32. caCert := cert.MustGenerate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageCertSign))
  33. expiredCert := cert.MustGenerate(caCert, cert.NotAfter(time.Now().Add(time.Minute*-2)), cert.CommonName("www.v2ray.com"), cert.DNSNames("www.v2ray.com"))
  34. certificate := ParseCertificate(caCert)
  35. certificate.Usage = Certificate_AUTHORITY_ISSUE
  36. certificate2 := ParseCertificate(expiredCert)
  37. c := &Config{
  38. Certificate: []*Certificate{
  39. certificate,
  40. certificate2,
  41. },
  42. }
  43. tlsConfig := c.GetTLSConfig()
  44. v2rayCert, err := tlsConfig.GetCertificate(&gotls.ClientHelloInfo{
  45. ServerName: "www.v2ray.com",
  46. })
  47. common.Must(err)
  48. x509Cert, err := x509.ParseCertificate(v2rayCert.Certificate[0])
  49. common.Must(err)
  50. assert(x509Cert.NotAfter.After(time.Now()), IsTrue)
  51. }
  52. func TestInsecureCertificates(t *testing.T) {
  53. c := &Config{
  54. AllowInsecureCiphers: true,
  55. }
  56. tlsConfig := c.GetTLSConfig()
  57. if len(tlsConfig.CipherSuites) > 0 {
  58. t.Fatal("Unexpected tls cipher suites list: ", tlsConfig.CipherSuites)
  59. }
  60. }
  61. func BenchmarkCertificateIssuing(b *testing.B) {
  62. certificate := ParseCertificate(cert.MustGenerate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageCertSign)))
  63. certificate.Usage = Certificate_AUTHORITY_ISSUE
  64. c := &Config{
  65. Certificate: []*Certificate{
  66. certificate,
  67. },
  68. }
  69. tlsConfig := c.GetTLSConfig()
  70. lenCerts := len(tlsConfig.Certificates)
  71. b.ResetTimer()
  72. for i := 0; i < b.N; i++ {
  73. _, _ = tlsConfig.GetCertificate(&gotls.ClientHelloInfo{
  74. ServerName: "www.v2ray.com",
  75. })
  76. delete(tlsConfig.NameToCertificate, "www.v2ray.com")
  77. tlsConfig.Certificates = tlsConfig.Certificates[:lenCerts]
  78. }
  79. }