summaryrefslogtreecommitdiffstats
path: root/doc/invoke-gnutls-serv.texi
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 07:33:12 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 07:33:12 +0000
commit36082a2fe36ecd800d784ae44c14f1f18c66a7e9 (patch)
tree6c68e0c0097987aff85a01dabddd34b862309a7c /doc/invoke-gnutls-serv.texi
parentInitial commit. (diff)
downloadgnutls28-36082a2fe36ecd800d784ae44c14f1f18c66a7e9.tar.xz
gnutls28-36082a2fe36ecd800d784ae44c14f1f18c66a7e9.zip
Adding upstream version 3.7.9.upstream/3.7.9upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'doc/invoke-gnutls-serv.texi')
-rw-r--r--doc/invoke-gnutls-serv.texi440
1 files changed, 440 insertions, 0 deletions
diff --git a/doc/invoke-gnutls-serv.texi b/doc/invoke-gnutls-serv.texi
new file mode 100644
index 0000000..f2b54bd
--- /dev/null
+++ b/doc/invoke-gnutls-serv.texi
@@ -0,0 +1,440 @@
+@node gnutls-serv Invocation
+@heading Invoking gnutls-serv
+@pindex gnutls-serv
+
+Server program that listens to incoming TLS connections.
+
+@anchor{gnutls-serv usage}
+@subheading gnutls-serv help/usage (@option{-?})
+@cindex gnutls-serv help
+
+The text printed is the same whether selected with the @code{help} option
+(@option{--help}) or the @code{more-help} option (@option{--more-help}). @code{more-help} will print
+the usage text by passing it through a pager program.
+@code{more-help} is disabled on platforms without a working
+@code{fork(2)} function. The @code{PAGER} environment variable is
+used to select the program, defaulting to @file{more}. Both will exit
+with a status code of 0.
+
+@exampleindent 0
+@example
+gnutls-serv - GnuTLS server
+Usage: gnutls-serv [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
+
+None:
+
+ -d, --debug=num Enable debugging
+ - it must be in the range:
+ 0 to 9999
+ --sni-hostname=str Server's hostname for server name extension
+ --sni-hostname-fatal Send fatal alert on sni-hostname mismatch
+ --alpn=str Specify ALPN protocol to be enabled by the server
+ --alpn-fatal Send fatal alert on non-matching ALPN name
+ --noticket Don't accept session tickets
+ --earlydata Accept early data
+ --maxearlydata=num The maximum early data size to accept
+ - it must be in the range:
+ 1 to 2147483648
+ --nocookie Don't require cookie on DTLS sessions
+ -g, --generate Generate Diffie-Hellman parameters
+ -q, --quiet Suppress some messages
+ --nodb Do not use a resumption database
+ --http Act as an HTTP server
+ --echo Act as an Echo server
+ --crlf Do not replace CRLF by LF in Echo server mode
+ -u, --udp Use DTLS (datagram TLS) over UDP
+ --mtu=num Set MTU for datagram TLS
+ - it must be in the range:
+ 0 to 17000
+ --srtp-profiles=str Offer SRTP profiles
+ -a, --disable-client-cert Do not request a client certificate
+ - prohibits the option 'require-client-cert'
+ -r, --require-client-cert Require a client certificate
+ --verify-client-cert If a client certificate is sent then verify it
+ --compress-cert=str Compress certificate
+ -b, --heartbeat Activate heartbeat support
+ --x509fmtder Use DER format for certificates to read from
+ --priority=str Priorities string
+ --dhparams=file DH params file to use
+ - file must pre-exist
+ --x509cafile=str Certificate file or PKCS #11 URL to use
+ --x509crlfile=file CRL file to use
+ - file must pre-exist
+ --x509keyfile=str X.509 key file or PKCS #11 URL to use
+ --x509certfile=str X.509 Certificate file or PKCS #11 URL to use
+ --rawpkkeyfile=str Private key file (PKCS #8 or PKCS #12) or PKCS #11 URL to use
+ --rawpkfile=str Raw public-key file to use
+ - requires the option 'rawpkkeyfile'
+ --srppasswd=file SRP password file to use
+ - file must pre-exist
+ --srppasswdconf=file SRP password configuration file to use
+ - file must pre-exist
+ --pskpasswd=file PSK password file to use
+ - file must pre-exist
+ --pskhint=str PSK identity hint to use
+ --ocsp-response=str The OCSP response to send to client
+ --ignore-ocsp-response-errors Ignore any errors when setting the OCSP response
+ -p, --port=num The port to connect to
+ -l, --list Print a list of the supported algorithms and modes
+ --provider=file Specify the PKCS #11 provider library
+ - file must pre-exist
+ --keymatexport=str Label used for exporting keying material
+ --keymatexportsize=num Size of the exported keying material
+ --recordsize=num The maximum record size to advertise
+ - it must be in the range:
+ 0 to 16384
+ --httpdata=file The data used as HTTP response
+ - file must pre-exist
+
+Version, usage and configuration options:
+
+ -v, --version[=arg] output version information and exit
+ -h, --help display extended usage information and exit
+ -!, --more-help extended usage information passed thru pager
+
+Options are specified by doubled hyphens and their name or by a single
+hyphen and the flag character.
+
+Server program that listens to incoming TLS connections.
+
+Please send bug reports to: <bugs@@gnutls.org>
+
+@end example
+@exampleindent 4
+
+@subheading debug option (-d).
+@anchor{gnutls-serv debug}
+
+This is the ``enable debugging'' option.
+This option takes a ArgumentType.NUMBER argument.
+Specifies the debug level.
+@subheading sni-hostname option.
+@anchor{gnutls-serv sni-hostname}
+
+This is the ``server's hostname for server name extension'' option.
+This option takes a ArgumentType.STRING argument.
+Server name of type host_name that the server will recognise as its own. If the server receives client hello with different name, it will send a warning-level unrecognized_name alert.
+@subheading alpn option.
+@anchor{gnutls-serv alpn}
+
+This is the ``specify alpn protocol to be enabled by the server'' option.
+This option takes a ArgumentType.STRING argument.
+Specify the (textual) ALPN protocol for the server to use.
+@subheading require-client-cert option (-r).
+@anchor{gnutls-serv require-client-cert}
+
+This is the ``require a client certificate'' option.
+This option before 3.6.0 used to imply --verify-client-cert.
+Since 3.6.0 it will no longer verify the certificate by default.
+@subheading verify-client-cert option.
+@anchor{gnutls-serv verify-client-cert}
+
+This is the ``if a client certificate is sent then verify it'' option.
+Do not require, but if a client certificate is sent then verify it and close the connection if invalid.
+@subheading compress-cert option.
+@anchor{gnutls-serv compress-cert}
+
+This is the ``compress certificate'' option.
+This option takes a ArgumentType.STRING argument.
+This option sets a supported compression method for certificate compression.
+@subheading heartbeat option (-b).
+@anchor{gnutls-serv heartbeat}
+
+This is the ``activate heartbeat support'' option.
+Regularly ping client via heartbeat extension messages
+@subheading priority option.
+@anchor{gnutls-serv priority}
+
+This is the ``priorities string'' option.
+This option takes a ArgumentType.STRING argument.
+TLS algorithms and protocols to enable. You can
+use predefined sets of ciphersuites such as PERFORMANCE,
+NORMAL, SECURE128, SECURE256. The default is NORMAL.
+
+Check the GnuTLS manual on section ``Priority strings'' for more
+information on allowed keywords
+@subheading x509keyfile option.
+@anchor{gnutls-serv x509keyfile}
+
+This is the ``x.509 key file or pkcs #11 url to use'' option.
+This option takes a ArgumentType.STRING argument.
+Specify the private key file or URI to use; it must correspond to
+the certificate specified in --x509certfile. Multiple keys and certificates
+can be specified with this option and in that case each occurrence of keyfile
+must be followed by the corresponding x509certfile or vice-versa.
+@subheading x509certfile option.
+@anchor{gnutls-serv x509certfile}
+
+This is the ``x.509 certificate file or pkcs #11 url to use'' option.
+This option takes a ArgumentType.STRING argument.
+Specify the certificate file or URI to use; it must correspond to
+the key specified in --x509keyfile. Multiple keys and certificates
+can be specified with this option and in that case each occurrence of keyfile
+must be followed by the corresponding x509certfile or vice-versa.
+@subheading x509dsakeyfile option.
+@anchor{gnutls-serv x509dsakeyfile}
+
+This is an alias for the @code{x509keyfile} option,
+@pxref{gnutls-serv x509keyfile, the x509keyfile option documentation}.
+
+@subheading x509dsacertfile option.
+@anchor{gnutls-serv x509dsacertfile}
+
+This is an alias for the @code{x509certfile} option,
+@pxref{gnutls-serv x509certfile, the x509certfile option documentation}.
+
+@subheading x509ecckeyfile option.
+@anchor{gnutls-serv x509ecckeyfile}
+
+This is an alias for the @code{x509keyfile} option,
+@pxref{gnutls-serv x509keyfile, the x509keyfile option documentation}.
+
+@subheading x509ecccertfile option.
+@anchor{gnutls-serv x509ecccertfile}
+
+This is an alias for the @code{x509certfile} option,
+@pxref{gnutls-serv x509certfile, the x509certfile option documentation}.
+
+@subheading rawpkkeyfile option.
+@anchor{gnutls-serv rawpkkeyfile}
+
+This is the ``private key file (pkcs #8 or pkcs #12) or pkcs #11 url to use'' option.
+This option takes a ArgumentType.STRING argument.
+Specify the private key file or URI to use; it must correspond to
+the raw public-key specified in --rawpkfile. Multiple key pairs
+can be specified with this option and in that case each occurrence of keyfile
+must be followed by the corresponding rawpkfile or vice-versa.
+
+In order to instruct the application to negotiate raw public keys one
+must enable the respective certificate types via the priority strings (i.e. CTYPE-CLI-*
+and CTYPE-SRV-* flags).
+
+Check the GnuTLS manual on section ``Priority strings'' for more
+information on how to set certificate types.
+@subheading rawpkfile option.
+@anchor{gnutls-serv rawpkfile}
+
+This is the ``raw public-key file to use'' option.
+This option takes a ArgumentType.STRING argument.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must appear in combination with the following options:
+rawpkkeyfile.
+@end itemize
+
+Specify the raw public-key file to use; it must correspond to
+the private key specified in --rawpkkeyfile. Multiple key pairs
+can be specified with this option and in that case each occurrence of keyfile
+must be followed by the corresponding rawpkfile or vice-versa.
+
+In order to instruct the application to negotiate raw public keys one
+must enable the respective certificate types via the priority strings (i.e. CTYPE-CLI-*
+and CTYPE-SRV-* flags).
+
+Check the GnuTLS manual on section ``Priority strings'' for more
+information on how to set certificate types.
+@subheading ocsp-response option.
+@anchor{gnutls-serv ocsp-response}
+
+This is the ``the ocsp response to send to client'' option.
+This option takes a ArgumentType.STRING argument.
+If the client requested an OCSP response, return data from this file to the client.
+@subheading ignore-ocsp-response-errors option.
+@anchor{gnutls-serv ignore-ocsp-response-errors}
+
+This is the ``ignore any errors when setting the ocsp response'' option.
+That option instructs gnutls to not attempt to match the provided OCSP responses with the certificates.
+@subheading list option (-l).
+@anchor{gnutls-serv list}
+
+This is the ``print a list of the supported algorithms and modes'' option.
+Print a list of the supported algorithms and modes. If a priority string is given then only the enabled ciphersuites are shown.
+@subheading provider option.
+@anchor{gnutls-serv provider}
+
+This is the ``specify the pkcs #11 provider library'' option.
+This option takes a ArgumentType.FILE argument.
+This will override the default options in /etc/gnutls/pkcs11.conf
+@subheading version option (-v).
+@anchor{gnutls-serv version}
+
+This is the ``output version information and exit'' option.
+This option takes a ArgumentType.KEYWORD argument.
+Output version of program and exit. The default mode is `v', a simple
+version. The `c' mode will print copyright information and `n' will
+print the full copyright notice.
+@subheading help option (-h).
+@anchor{gnutls-serv help}
+
+This is the ``display extended usage information and exit'' option.
+Display usage information and exit.
+@subheading more-help option (-!).
+@anchor{gnutls-serv more-help}
+
+This is the ``extended usage information passed thru pager'' option.
+Pass the extended usage information through a pager.
+@anchor{gnutls-serv exit status}
+@subheading gnutls-serv exit status
+
+One of the following exit values will be returned:
+@table @samp
+@item 0 (EXIT_SUCCESS)
+Successful program execution.
+@item 1 (EXIT_FAILURE)
+The operation failed or the command syntax was not valid.
+@end table
+@anchor{gnutls-serv See Also}
+@subsubheading gnutls-serv See Also
+gnutls-cli-debug(1), gnutls-cli(1)
+@anchor{gnutls-serv Examples}
+@subsubheading gnutls-serv Examples
+Running your own TLS server based on GnuTLS can be useful when
+debugging clients and/or GnuTLS itself. This section describes how to
+use @code{gnutls-serv} as a simple HTTPS server.
+
+The most basic server can be started as:
+
+@example
+gnutls-serv --http --priority "NORMAL:+ANON-ECDH:+ANON-DH"
+@end example
+
+It will only support anonymous ciphersuites, which many TLS clients
+refuse to use.
+
+The next step is to add support for X.509. First we generate a CA:
+
+@example
+$ certtool --generate-privkey > x509-ca-key.pem
+$ echo 'cn = GnuTLS test CA' > ca.tmpl
+$ echo 'ca' >> ca.tmpl
+$ echo 'cert_signing_key' >> ca.tmpl
+$ certtool --generate-self-signed --load-privkey x509-ca-key.pem \
+ --template ca.tmpl --outfile x509-ca.pem
+@end example
+
+Then generate a server certificate. Remember to change the dns_name
+value to the name of your server host, or skip that command to avoid
+the field.
+
+@example
+$ certtool --generate-privkey > x509-server-key.pem
+$ echo 'organization = GnuTLS test server' > server.tmpl
+$ echo 'cn = test.gnutls.org' >> server.tmpl
+$ echo 'tls_www_server' >> server.tmpl
+$ echo 'encryption_key' >> server.tmpl
+$ echo 'signing_key' >> server.tmpl
+$ echo 'dns_name = test.gnutls.org' >> server.tmpl
+$ certtool --generate-certificate --load-privkey x509-server-key.pem \
+ --load-ca-certificate x509-ca.pem --load-ca-privkey x509-ca-key.pem \
+ --template server.tmpl --outfile x509-server.pem
+@end example
+
+For use in the client, you may want to generate a client certificate
+as well.
+
+@example
+$ certtool --generate-privkey > x509-client-key.pem
+$ echo 'cn = GnuTLS test client' > client.tmpl
+$ echo 'tls_www_client' >> client.tmpl
+$ echo 'encryption_key' >> client.tmpl
+$ echo 'signing_key' >> client.tmpl
+$ certtool --generate-certificate --load-privkey x509-client-key.pem \
+ --load-ca-certificate x509-ca.pem --load-ca-privkey x509-ca-key.pem \
+ --template client.tmpl --outfile x509-client.pem
+@end example
+
+To be able to import the client key/certificate into some
+applications, you will need to convert them into a PKCS#12 structure.
+This also encrypts the security sensitive key with a password.
+
+@example
+$ certtool --to-p12 --load-ca-certificate x509-ca.pem \
+ --load-privkey x509-client-key.pem --load-certificate x509-client.pem \
+ --outder --outfile x509-client.p12
+@end example
+
+For icing, we'll create a proxy certificate for the client too.
+
+@example
+$ certtool --generate-privkey > x509-proxy-key.pem
+$ echo 'cn = GnuTLS test client proxy' > proxy.tmpl
+$ certtool --generate-proxy --load-privkey x509-proxy-key.pem \
+ --load-ca-certificate x509-client.pem --load-ca-privkey x509-client-key.pem \
+ --load-certificate x509-client.pem --template proxy.tmpl \
+ --outfile x509-proxy.pem
+@end example
+
+Then start the server again:
+
+@example
+$ gnutls-serv --http \
+ --x509cafile x509-ca.pem \
+ --x509keyfile x509-server-key.pem \
+ --x509certfile x509-server.pem
+@end example
+
+Try connecting to the server using your web browser. Note that the
+server listens to port 5556 by default.
+
+While you are at it, to allow connections using ECDSA, you can also
+create a ECDSA key and certificate for the server. These credentials
+will be used in the final example below.
+
+@example
+$ certtool --generate-privkey --ecdsa > x509-server-key-ecc.pem
+$ certtool --generate-certificate --load-privkey x509-server-key-ecc.pem \
+ --load-ca-certificate x509-ca.pem --load-ca-privkey x509-ca-key.pem \
+ --template server.tmpl --outfile x509-server-ecc.pem
+@end example
+
+
+The next step is to add support for SRP authentication. This requires
+an SRP password file created with @code{srptool}.
+To start the server with SRP support:
+
+@example
+gnutls-serv --http --priority NORMAL:+SRP-RSA:+SRP \
+ --srppasswdconf srp-tpasswd.conf \
+ --srppasswd srp-passwd.txt
+@end example
+
+Let's also start a server with support for PSK. This would require
+a password file created with @code{psktool}.
+
+@example
+gnutls-serv --http --priority NORMAL:+ECDHE-PSK:+PSK \
+ --pskpasswd psk-passwd.txt
+@end example
+
+If you want a server with support for raw public-keys we can also add these
+credentials. Note however that there is no identity information linked to these
+keys as is the case with regular x509 certificates. Authentication must be done
+via different means. Also we need to explicitly enable raw public-key certificates
+via the priority strings.
+
+@example
+gnutls-serv --http --priority NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK \
+ --rawpkfile srv.rawpk.pem \
+ --rawpkkeyfile srv.key.pem
+@end example
+
+
+Finally, we start the server with all the earlier parameters and you
+get this command:
+
+@example
+gnutls-serv --http --priority NORMAL:+PSK:+SRP:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK \
+ --x509cafile x509-ca.pem \
+ --x509keyfile x509-server-key.pem \
+ --x509certfile x509-server.pem \
+ --x509keyfile x509-server-key-ecc.pem \
+ --x509certfile x509-server-ecc.pem \
+ --srppasswdconf srp-tpasswd.conf \
+ --srppasswd srp-passwd.txt \
+ --pskpasswd psk-passwd.txt \
+ --rawpkfile srv.rawpk.pem \
+ --rawpkkeyfile srv.key.pem
+@end example