2017-03-13 20:24:37 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# tls
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-04 12:53:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Name
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*tls* - allows you to configure the server certificates for the TLS and gRPC servers.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Description
  
						 
					
						
							
								
									
										
										
										
											2017-03-13 20:24:37 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								CoreDNS supports queries that are encrypted using TLS (DNS over Transport Layer Security, RFC 7858)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								or are using gRPC (https://grpc.io/, not an IETF standard). Normally DNS traffic isn't encrypted at
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								all (DNSSEC only signs resource records).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-14 09:36:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The * tls *  "plugin" allows you to configure the cryptographic keys that are needed for both
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								DNS-over-TLS and DNS-over-gRPC. If the `tls`  directive is omitted, then no encryption takes place.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The gRPC protobuffer is defined in `pb/dns.proto` . It defines the proto as a simple wrapper for the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								wire data of a DNS message.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-13 20:24:37 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								## Syntax
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								~~~ txt
							 
						 
					
						
							
								
									
										
										
										
											2018-05-15 19:53:46 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								tls CERT KEY [CA]
							 
						 
					
						
							
								
									
										
										
										
											2017-03-13 20:24:37 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-15 19:53:46 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Parameter CA is optional. If not set, system CAs can be used to verify the client certificate
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-31 09:30:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								~~~ txt
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								tls CERT KEY [CA] {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client_auth nocert|request|require|verify_if_given|require_and_verify
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								If client_auth option is specified, it controls the client authentication policy.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The option value corresponds to the [ClientAuthType values of the Go tls package ](https://golang.org/pkg/crypto/tls/#ClientAuthType ): NoClientCert, RequestClientCert, RequireAnyClientCert, VerifyClientCertIfGiven, and RequireAndVerifyClientCert, respectively.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The default is "nocert".  Note that it makes no sense to specify parameter CA unless this option is set to verify_if_given or require_and_verify.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-13 20:24:37 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								## Examples
  
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Start a DNS-over-TLS server that picks up incoming DNS-over-TLS queries on port 5553 and uses the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								nameservers defined in `/etc/resolv.conf`  to resolve the query. This proxy path uses plain old DNS.
							 
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								~~~
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								tls://.:5553 {
							 
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tls cert.pem key.pem ca.pem
							 
						 
					
						
							
								
									
										
										
										
											2019-03-03 23:32:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									forward . /etc/resolv.conf
							 
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								~~~
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Start a DNS-over-gRPC server that is similar to the previous example, but using DNS-over-gRPC for
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								incoming queries.
							 
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								~~~
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								grpc://. {
							 
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									tls cert.pem key.pem ca.pem
							 
						 
					
						
							
								
									
										
										
										
											2019-03-03 23:32:38 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									forward . /etc/resolv.conf
							 
						 
					
						
							
								
									
										
										
										
											2017-04-19 17:43:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								~~~
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 14:54:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Only Knot DNS' `kdig`  supports DNS-over-TLS queries, no command line client supports gRPC making
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								debugging these transports harder than it should be.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Also See
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								RFC 7858 and https://grpc.io.