debug.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/jcmturner/gokrb5/config"
  6. "github.com/jcmturner/gokrb5/messages"
  7. "github.com/jcmturner/gokrb5/client"
  8. "encoding/hex"
  9. "github.com/jcmturner/gokrb5/keytab"
  10. )
  11. const ktab = "05020000004b0001000b544553542e474f4b5242350009746573747573657231000000015898e0770100120020bbdc430aab7e2d4622a0b6951481453b0962e9db8e2f168942ad175cda6d9de900000001"
  12. const krb5conf =`[libdefaults]
  13. default_realm = TEST.GOKRB5
  14. dns_lookup_realm = false
  15. dns_lookup_kdc = false
  16. ticket_lifetime = 24h
  17. forwardable = yes
  18. default_tkt_enctypes = aes256-cts-hmac-sha1-96
  19. [realms]
  20. TEST.GOKRB5 = {
  21. kdc = 10.80.88.88:88
  22. admin_server = 10.80.88.88:749
  23. default_domain = test.gokrb5
  24. }
  25. [domain_realm]
  26. .test.gokrb5 = TEST.GOKRB5
  27. test.gokrb5 = TEST.GOKRB5`
  28. func main() {
  29. c, err := config.NewConfigFromString(krb5conf)
  30. if err != nil {
  31. fmt.Fprintf(os.Stderr, "Error creating config: %v", err)
  32. }
  33. fmt.Fprintf(os.Stdout, "Config: %+v\n", *c)
  34. a := messages.NewASReq(c, "testuser1")
  35. fmt.Fprintf(os.Stdout, "AS_REQ: %+v\n", a)
  36. b, err := a.Marshal()
  37. if err != nil {
  38. fmt.Fprintf(os.Stderr, "Error marshalling AS_REQ: %v\n", err)
  39. }
  40. rb, err := client.SendToKDC(c, b)
  41. if err != nil {
  42. fmt.Fprintf(os.Stderr, "Error sending to KDC: %v\n", err)
  43. }
  44. var ar messages.ASRep
  45. ar.Unmarshal(rb)
  46. kb, _ := hex.DecodeString(ktab)
  47. kt, err := keytab.Parse(kb)
  48. if err != nil {
  49. fmt.Fprintf(os.Stderr, "KT load err: %v\n\n", err)
  50. }
  51. err = ar.DecryptEncPartWithKeytab(kt)
  52. if err != nil {
  53. fmt.Fprintf(os.Stderr, "\nDecrypt err: %v\n", err)
  54. } else {
  55. fmt.Fprintf(os.Stdout, "\n\nAS REP decrypted with keytab: %+v\n", ar)
  56. }
  57. }