-----
This module has been built as a replacement for the aging mod_auth_kerb.
-It's aim is to use only GSSAPI calls and be as much as possible agnostic
+Its aim is to use only GSSAPI calls and be as much as possible agnostic
of the actual mechanism used.
Dependencies
is necessary to achieve full functionality. Reduced functionality is
provided without these extensions.
-krb5 (>=1.11)
-Apache (>=2.4)
+ krb5 (>=1.11)
+ Apache (>=2.4)
+
+### Tests
+
+To run tests, you also need:
+
+* The Kerberos 5 Key-Distribution-Center (`krb5-kdc` package on Debian)
+* [nss_wrapper](https://cwrap.org/nss_wrapper.html)
+* [socket_wrapper](https://cwrap.org/socket_wrapper.html)
Installation
------------
-./configure
-make
-make install
+ ./configure
+ make
+ make install
Configuration
location of the keytab.
#### Example
-<Location /private>
- AuthType GSSAPI
- AuthName "GSSAPI Single Sign On Login"
- GssapiCredStore keytab:/etc/httpd.keytab
- Require valid-user
-</Location>
+ <Location /private>
+ AuthType GSSAPI
+ AuthName "GSSAPI Single Sign On Login"
+ GssapiCredStore keytab:/etc/httpd.keytab
+ Require valid-user
+ </Location>
Your Apache server need read access to the keytab configured.
If your Kerberos implementation does not support the credential store
Forces the authentication attempt to fail if the connection is not being
established over TLS
-Example:
+#### Example
GssapiSSLonly On
however the complete client principal name is also made available in the
GSS_NAME variable.
-Example:
+#### Example
GssapiLocalName on
the connection in order to keep the state between round-trips. With this option
enable incomplete context are store in the connection and retrieved on the next
request for continuation.
-When using this option you may also ant to set the Persistent-Auth header for
-those clients that make use of it.
-Example:
+#### Example
GssapiConnectionBound On
- Header set Persistent-Auth "true"
+
+
+### GssapiSignalPersistentAuth
+For clients that make use of Persistent-Auth header, send the header according
+to GssapiConnectionBound setting.
+
+#### Example
+ GssapiSignalPersistentAuth On
### GssapiUseSessions
[mod_sessions](http://httpd.apache.org/docs/current/mod/mod_session.html)
documentation for more information.
-Example:
+#### Example
GssapiUseSessions On
Session On
SessionCookieName gssapi_session path=/private;httponly;secure;
When GssapiUseSessions is enabled a key use to encrypt and MAC the session
data will be automatically generated at startup, this means session data will
-become unreadable if the server is restarted or multiple serves are used and
+become unreadable if the server is restarted or multiple servers are used and
the client is load balanced from one to another. To obviate this problem the
admin can choose to install a permanent key in the configuration so that
session data remain accessible after a restart or by multiple servers
The key must be a base64 encoded raw key of 32 bytes of length.
-Example:
+#### Example
GssapiSessionKey key:VGhpcyBpcyBhIDMyIGJ5dGUgbG9uZyBzZWNyZXQhISE=
The GssapiCredStore option allows to specify multiple credential related
options like keytab location, client_keytab location, ccache location etc.
-Example:
+#### Example
GssapiCredStore keytab:/etc/httpd.keytab
GssapiCredStore ccache:FILE:/var/run/httpd/krb5ccache
principal and the subprocess environment variable KRB5CCNAME will be set
to point to that file.
-Example:
- GssapiDelegCcacheDir = /var/run/httpd/clientcaches
-
+#### Example
+ GssapiDelegCcacheDir /var/run/httpd/clientcaches
A user foo@EXAMPLE.COM delegating its credentials would cause the server to
create a ccache file named /var/run/httpd/clientcaches/foo@EXAMPLE.COM
+
### GssapiUseS4U2Proxy
Enables the use of the s4u2Proxy Kerberos extension also known as
populated with the user's provided ticket which is later used as evidence
ticket by the application.
-Example:
+#### Example
GssapiUseS4U2Proxy On
- GssapiDelegCcacheDir = /var/run/httpd/clientcaches
+ GssapiCredStore keytab:/etc/httpd.keytab
+ GssapiCredStore client_keytab:/etc/httpd.keytab
+ GssapiCredStore ccache:FILE:/var/run/httpd/krb5ccache
+ GssapiDelegCcacheDir /var/run/httpd/clientcaches
+
+**NOTE:** The client keytab is necessary to allow GSSAPI to initiate via keytab
+on its own. If not present an external mechanism needs to kinit with the
+keytab and store a ccache in the configured ccache file.
+
+
+### GssapiBasicAuth
+Allows the use of Basic Auth in conjunction with Negotiate.
+If the browser fails to use Negotiate is will instead fallback to Basic and
+the username and password will be used to try to acquire credentials in the
+module via GSSAPI. If credentials are acquire successfully then they are
+validated against the server's keytab.
+
+- **Enable with:** GssapiBasicAuth On
+- **Default:** GssapiBasicAuth Off
+
+#### Example
+ <Location /gssapi>
+ AuthType GSSAPI
+ AuthName "Login"
+ GssapiBasicAuth On
+ GssapiCredStore keytab:/etc/httpd/http.keytab
+ Require valid-user
+ </Location>
+
+
+### GssapiAllowedMech
+
+List of allowed mechanisms. This is useful to restrict the mechanism that
+can be used when credentials for multiple mechanisms are available.
+By default no mechanism is set, this means all locally available mechanisms
+are allowed. The recognized mechanism names are: krb5, iakerb, ntlmssp
+
+#### Example
+ GssapiAllowedMech krb5
+ GssapiAllowedMech ntlmssp
+
+
+### GssapiBasicAuthMech
+
+List of mechanisms against which Basic Auth is attempted. This is useful to
+restrict the mechanisms that can be used to attempt password auth.
+By default no mechanism is set, this means all locally available mechanisms
+are allowed, unless GssapiAllowedMech is set, in which case those are used.
+GssapiBasicAuthMech always takes precedence over GssapiAllowedMech.
+The recognized mechanism names are: krb5, iakerb, ntlmssp
+
+#### Example
+ GssapiBasicAuthMech krb5