|  | @@ -23,6 +23,7 @@ func ParseCertificate(c *cert.Certificate) *Certificate {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// BuildCertificates builds a list of TLS certificates from proto definition.
 | 
	
		
			
				|  |  |  func (c *Config) BuildCertificates() []tls.Certificate {
 | 
	
		
			
				|  |  |  	certs := make([]tls.Certificate, 0, len(c.Certificate))
 | 
	
		
			
				|  |  |  	for _, entry := range c.Certificate {
 | 
	
	
		
			
				|  | @@ -118,10 +119,11 @@ func getGetCertificateFunc(c *tls.Config, ca []*Certificate) func(hello *tls.Cli
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// GetTLSConfig converts this Config into tls.Config.
 | 
	
		
			
				|  |  |  func (c *Config) GetTLSConfig(opts ...Option) *tls.Config {
 | 
	
		
			
				|  |  |  	config := &tls.Config{
 | 
	
		
			
				|  |  |  		ClientSessionCache: globalSessionCache,
 | 
	
		
			
				|  |  | -		RootCAs:            c.GetCertPool(),
 | 
	
		
			
				|  |  | +		RootCAs:            c.getCertPool(),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	if c == nil {
 | 
	
		
			
				|  |  |  		return config
 | 
	
	
		
			
				|  | @@ -153,8 +155,10 @@ func (c *Config) GetTLSConfig(opts ...Option) *tls.Config {
 | 
	
		
			
				|  |  |  	return config
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// Option for building TLS config.
 | 
	
		
			
				|  |  |  type Option func(*tls.Config)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// WithDestination sets the server name in TLS config.
 | 
	
		
			
				|  |  |  func WithDestination(dest net.Destination) Option {
 | 
	
		
			
				|  |  |  	return func(config *tls.Config) {
 | 
	
		
			
				|  |  |  		if dest.Address.Family().IsDomain() && len(config.ServerName) == 0 {
 | 
	
	
		
			
				|  | @@ -163,6 +167,7 @@ func WithDestination(dest net.Destination) Option {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// WithNextProto sets the ALPN values in TLS config.
 | 
	
		
			
				|  |  |  func WithNextProto(protocol ...string) Option {
 | 
	
		
			
				|  |  |  	return func(config *tls.Config) {
 | 
	
		
			
				|  |  |  		if len(config.NextProtos) == 0 {
 | 
	
	
		
			
				|  | @@ -171,6 +176,7 @@ func WithNextProto(protocol ...string) Option {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// ConfigFromContext fetches Config from context. Nil if not found.
 | 
	
		
			
				|  |  |  func ConfigFromContext(ctx context.Context) *Config {
 | 
	
		
			
				|  |  |  	securitySettings := internet.SecuritySettingsFromContext(ctx)
 | 
	
		
			
				|  |  |  	if securitySettings == nil {
 |