jcmturner/gokrb5

Pure Go Kerberos library for clients and services

781

stars

660

commits

Go

primary language

Jul 29, 2024

updated

go
golang
gssapi
kerberos
kerberos-authentication
kerberos-client
kerberos-spnego
keytab
spnego

README

gokrb5

It is recommended to use the latest version: Version

Development will be focused on the latest major version. New features will only be targeted at this version.

VersionsDependency ManagementImport PathUsageGodocGo Report Card
v8Go modulesimport "github.com/jcmturner/gokrb5/v8/{sub-package}"UsageGoDocGo Report Card
v7gopkg.inimport "gopkg.in/jcmturner/gokrb5.v7/{sub-package}"UsageGoDocGo Report Card

Go Version Support

Go version Go version Go version

gokrb5 may work with other versions of Go but they are not formally tested. It has been reported that gokrb5 also works with the gollvm compiler but this is not formally tested.

Features

  • Pure Go - no dependency on external libraries
  • No platform specific code
  • Server Side
    • HTTP handler wrapper implements SPNEGO Kerberos authentication
    • HTTP handler wrapper decodes Microsoft AD PAC authorization data
  • Client Side
    • Client that can authenticate to an SPNEGO Kerberos authenticated web service
    • Ability to change client's password
  • General
    • Kerberos libraries for custom integration
    • Parsing Keytab files
    • Parsing krb5.conf files
    • Parsing client credentials cache files such as /tmp/krb5cc_$(id -u $(whoami))

Implemented Encryption & Checksum Types

ImplementationEncryption IDChecksum IDRFC
des3-cbc-sha1-kd16123961
aes128-cts-hmac-sha1-9617153962
aes256-cts-hmac-sha1-9618163962
aes128-cts-hmac-sha256-12819198009
aes256-cts-hmac-sha384-19220208009
rc4-hmac23-1384757

The following is working/tested:

  • Tested against MIT KDC (1.6.3 is the oldest version tested against) and Microsoft Active Directory (Windows 2008 R2)
  • Tested against a KDC that supports PA-FX-FAST.
  • Tested against users that have pre-authentication required using PA-ENC-TIMESTAMP.
  • Microsoft PAC Authorization Data is processed and exposed in the HTTP request context. Available if Microsoft Active Directory is used as the KDC.

Contributing

If you are interested in contributing to gokrb5, great! Please read the contribution guidelines.


References

Thanks

  • Greg Hudson from the MIT Consortium for Kerberos and Internet Trust for providing useful advice.

Contributing

Thank you for your interest in contributing to gokrb5 please read the contribution guide as it should help you get started.

Known Issues

IssueWorked around?References
The Go standard library's encoding/asn1 package cannot unmarshal into slice of asn1.RawValueYeshttps://github.com/golang/go/issues/17321
The Go standard library's encoding/asn1 package cannot marshal into a GeneralStringYes - using https://github.com/jcmturner/gofork/tree/master/encoding/asn1https://github.com/golang/go/issues/18832
The Go standard library's encoding/asn1 package cannot marshal into slice of strings and pass stringtype parameter tags to membersYes - using https://github.com/jcmturner/gofork/tree/master/encoding/asn1https://github.com/golang/go/issues/18834
The Go standard library's encoding/asn1 package cannot marshal with application tagsYes
The Go standard library's x/crypto/pbkdf2.Key function uses the int type for iteraction count limiting meaning the 4294967296 count specified in https://tools.ietf.org/html/rfc3962 section 4 cannot be met on 32bit systemsYes - using https://github.com/jcmturner/gofork/tree/master/x/crypto/pbkdf2https://go-review.googlesource.com/c/crypto/+/85535

Contributors

(top 30 of 33)

jcmturner

587 commits

hakan-carlsson

10 commits

mjtrangoni

6 commits

jcmturner/gokrb5

Pure Go Kerberos library for clients and services

781

stars

660

commits

Go

primary language

Jul 29, 2024

updated

go
golang
gssapi
kerberos
kerberos-authentication
kerberos-client
kerberos-spnego
keytab
spnego

README

gokrb5

It is recommended to use the latest version: Version

Development will be focused on the latest major version. New features will only be targeted at this version.

VersionsDependency ManagementImport PathUsageGodocGo Report Card
v8Go modulesimport "github.com/jcmturner/gokrb5/v8/{sub-package}"UsageGoDocGo Report Card
v7gopkg.inimport "gopkg.in/jcmturner/gokrb5.v7/{sub-package}"UsageGoDocGo Report Card

Go Version Support

Go version Go version Go version

gokrb5 may work with other versions of Go but they are not formally tested. It has been reported that gokrb5 also works with the gollvm compiler but this is not formally tested.

Features

  • Pure Go - no dependency on external libraries
  • No platform specific code
  • Server Side
    • HTTP handler wrapper implements SPNEGO Kerberos authentication
    • HTTP handler wrapper decodes Microsoft AD PAC authorization data
  • Client Side
    • Client that can authenticate to an SPNEGO Kerberos authenticated web service
    • Ability to change client's password
  • General
    • Kerberos libraries for custom integration
    • Parsing Keytab files
    • Parsing krb5.conf files
    • Parsing client credentials cache files such as /tmp/krb5cc_$(id -u $(whoami))

Implemented Encryption & Checksum Types

ImplementationEncryption IDChecksum IDRFC
des3-cbc-sha1-kd16123961
aes128-cts-hmac-sha1-9617153962
aes256-cts-hmac-sha1-9618163962
aes128-cts-hmac-sha256-12819198009
aes256-cts-hmac-sha384-19220208009
rc4-hmac23-1384757

The following is working/tested:

  • Tested against MIT KDC (1.6.3 is the oldest version tested against) and Microsoft Active Directory (Windows 2008 R2)
  • Tested against a KDC that supports PA-FX-FAST.
  • Tested against users that have pre-authentication required using PA-ENC-TIMESTAMP.
  • Microsoft PAC Authorization Data is processed and exposed in the HTTP request context. Available if Microsoft Active Directory is used as the KDC.

Contributing

If you are interested in contributing to gokrb5, great! Please read the contribution guidelines.


References

Thanks

  • Greg Hudson from the MIT Consortium for Kerberos and Internet Trust for providing useful advice.

Contributing

Thank you for your interest in contributing to gokrb5 please read the contribution guide as it should help you get started.

Known Issues

IssueWorked around?References
The Go standard library's encoding/asn1 package cannot unmarshal into slice of asn1.RawValueYeshttps://github.com/golang/go/issues/17321
The Go standard library's encoding/asn1 package cannot marshal into a GeneralStringYes - using https://github.com/jcmturner/gofork/tree/master/encoding/asn1https://github.com/golang/go/issues/18832
The Go standard library's encoding/asn1 package cannot marshal into slice of strings and pass stringtype parameter tags to membersYes - using https://github.com/jcmturner/gofork/tree/master/encoding/asn1https://github.com/golang/go/issues/18834
The Go standard library's encoding/asn1 package cannot marshal with application tagsYes
The Go standard library's x/crypto/pbkdf2.Key function uses the int type for iteraction count limiting meaning the 4294967296 count specified in https://tools.ietf.org/html/rfc3962 section 4 cannot be met on 32bit systemsYes - using https://github.com/jcmturner/gofork/tree/master/x/crypto/pbkdf2https://go-review.googlesource.com/c/crypto/+/85535

Contributors

(top 30 of 33)

jcmturner

587 commits

hakan-carlsson

10 commits

mjtrangoni

6 commits

Languages

Go

100.0%