هو اسم خدمة أساسي (SPN) ملزمة محددة من الجهاز ؟

StackOverflow https://stackoverflow.com/questions/435091

  •  10-07-2019
  •  | 
  •  

سؤال

في هذه اللحظة أنا الحصول على KrbException:النزاهة تحقق في مجال فك فشل (31) مع الشاباك التطبيق التجريبي (على جانب الخادم).الآن أنا أبحث عن السبب في ذلك.لدي الشك في أنه يأتي من حقيقة أن

  1. العميل والخادم تطبيق تشغيل على نفس الجهاز (localhost) و/أو
  2. SPN تم إنشاؤها على جهاز آخر (حاسوب)

الثاني يعني أن الخدمة الرئيسي تم إنشاؤها على الجهاز xxx0815.domain.net لذا SPN HTTP/xxx0815.domain.net@DOMAIN.NET.و آلتي ليست واحدة ، ولكن لدي ملف keytab بحيث ملقم تسجيل الدخول طريقة ينجح.

هل أنا مشتبه به بشكل صحيح أو أنا صنع آخر خطأ ؟

تكوين الملقم التعليمات البرمجية المصدر:
الملقم.conf

Server { 
    com.sun.security.auth.module.Krb5LoginModule 
        required 
        isInitiator=false 
        doNotPrompt=true 
        useKeyTab=true 
        keyTab="gssdemo.keytab" 
        storeKey=true 
        principal="HTTP/xxx0815.domain.net@DOMAIN.NET" 
        debug=true; 
};

GSSServer.java (حذفت الاشياء المتداوله)

    GSSManager manager = GSSManager.getInstance();
    GSSName serverName = manager.createName(getServerName(), null);
    GSSCredential serverCred = manager.createCredential(serverName,
                                                        GSSCredential.INDEFINITE_LIFETIME,
                                                        createKerberosOid(),
                                                        GSSCredential.ACCEPT_ONLY);
    GSSContext context = manager.createContext(serverCred);
    System.out.println("Context created successfully. Now incoming tokens could be accepted.");

    ServerSocket serverSocket = new ServerSocket(55555);
    SocketAdapter ca = new SocketAdapter(serverSocket.accept());

    while (!context.isEstablished()) {
        byte[] inToken = ca.readToken();
        byte[] outToken = context.acceptSecContext(inToken, 0, inToken.length);

        if (outToken != null) {
            ca.sendToken(outToken);
        }
    }

    System.out.println("Context established");
    System.out.println("Connected user is: " + context.getSrcName());
    context.dispose();

تكوين عميل التعليمات البرمجية المصدر:
العميل.conf

Client {
    com.sun.security.auth.module.Krb5LoginModule
        required
        useTicketCache=true
        debug=true;
};

GssClient.java (النمطي محذوفة)

    GSSManager manager = GSSManager.getInstance();
    GSSName clientName = manager.createName(getClientName(), null);
    GSSCredential clientCred = manager.createCredential(clientName,
                                                        8 * 3600,
                                                        createKerberosOid(),
                                                        GSSCredential.INITIATE_ONLY);
    GSSName serviceName = manager.createName("HTTP/xxx0815.domain.net@DOMAIN.NET", null);

    GSSContext context = manager.createContext(serviceName,
                                               createKerberosOid(),
                                               clientCred,
                                               GSSContext.DEFAULT_LIFETIME);
    context.requestMutualAuth(true);
    context.requestConf(false);
    context.requestInteg(true);

    System.out.println("Establishing context");
    SocketAdapter ca = new SocketAdapter(new Socket("localhost", 55555));

    byte[] inToken = new byte[0];
    while (true) {
        byte[] outToken = context.initSecContext(inToken, 0, inToken.length);

        if (outToken != null) {
            ca.sendToken(outToken);
        }

        if (context.isEstablished()) {
            break;
        }

        inToken = ca.readToken();
    }

    System.out.println("Context established: " + context.isEstablished());

    context.dispose();

لقد راجعت الصادرة والواردة شبكة البيانات هو نفسه على كلا الجانبين حتى أستطيع أن نستبعد مشكلة هناك (لدي BASE64 في ترميز الإخراج ثم ارسلها تيارات.أعتقد ليس هناك الكثير الذي يمكن أن تذهب الخطأ هناك...).

الاستثناء أحصل على:

Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Integrity check on decrypted field failed (31))
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:741)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
    at de.westlb.mrm.sandbox.gss.GssServer.acceptAndEstablish(GssServer.java:88)
    at de.westlb.mrm.sandbox.gss.GssServer.run(GssServer.java:66)
    ... 4 more
Caused by: KrbException: Integrity check on decrypted field failed (31)
    at sun.security.krb5.internal.crypto.DesCbcEType.decrypt(DesCbcEType.java:154)
    at sun.security.krb5.internal.crypto.DesCbcMd5EType.decrypt(DesCbcMd5EType.java:33)
    at sun.security.krb5.internal.crypto.DesCbcEType.decrypt(DesCbcEType.java:125)
    at sun.security.krb5.internal.crypto.DesCbcMd5EType.decrypt(DesCbcMd5EType.java:33)
    at sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:168)
    at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:267)
    at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:134)
    at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:79)
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:724)
    ... 8 more
هل كانت مفيدة؟

المحلول

إذا كانت سلامة فشل التحقق من أن يشير إلى أن البيانات لا يتم المرسلة / المستلمة بشكل صحيح (هذا أو هذا رسالة خطأ غير صحيحة).وبعبارة أخرى بعض التعديل حدث.

أنا أعلم أنك تقول كنت قد تحققت من أن إرسال بيانات تطابق البيانات الواردة في مستوى الشبكة ، ولكن هل أنت متأكد من أنه لا تلف قبل إرساله ، أو بعد الاستلام ؟ أود أن أقترح عليك مراجعة التعليمات البرمجية الخاصة بك هذا أولا.

تحرير:في الإجابة على السؤال الخاص بك ، الخدمة الرئيسية (حقا ، أي تذكرة) يمكن أن تكون ملزمة آلة معينة ، ولكن هذا عادة ما يتم في شروط من عنوان IP.في أي حال شيء مثل هذا ينبغي أن يؤدي إلى مستوى أعلى مختلفة الخطأ.

الخطأ أنك تحصل على الأصوات مثل ذلك هو وجود مشكلة في فك تشفير التذكرة في المقام الأول.ممكن سبب ذلك هو أنه باستخدام المفتاح الخاطئ ، والتي قد تكون ذات صلة إلى نسخ keytab.الخطأ الرئيسية كما يمكن أن يكون سبب الخطأ باستخدام التذكرة (kerberos أساسا رئيسيا في إدارة البروتوكول).هل من الممكن لديك مؤقتا قديمة/غير تذكرة ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top