SORU
24 Temmuz 2009, Cuma


Yükleme önlemek için nasıl "Sınırsız Güç" bir uygulama dağıtırken ilke dosyaları JOYCE?

Kutudan Java tarafından desteklenen 256-bit AES şifreleme kullanan bir uygulamam var. Bu sınırsız gücü, güvenlik klasöründe kavanoz JOYCE yüklemek doğru çalışması için biliyorum. Bu benim için iyi geliştirici olmak, onları yükleyebilirsiniz.

Benim sorum bu uygulama dağıtılacak beri, son kullanıcılar büyük ihtimalle bu ilke dosyaları yüklü değil. Son kullanıcı bu sadece app işlevi yapmak indirmek zorunda çekici bir çözüm değildir.

Bir yol uygulamam son kullanıcı makine üzerinde dosyaların üzerine yazmadan çalışması var mı? Politika yüklü dosyalar olmadan işleyebilir üçüncü parti bir yazılım mı? Ya da sadece bir KAVANOZ içinde bu ilke dosyaları başvurmak için bir yol?

CEVAP
18 Mart 2014, Salı


Bu sorun için genelde alıntı çözümler bir çift vardır. Bunların ne yazık ki hiçbiri tamamen tatmin edici

  • unlimited strength policy files yükleyin.Bu muhtemelen geliştirme iş istasyonu için doğru çözüm olsa da, hızlı bir şekilde teknik olmayan kullanıcılar her bilgisayarda dosyaları yüklemek için büyük bir güçlük (barikat) olur. Varhiçbir şekildeprogram ile dosyaları dağıtmak için; TOTEM dizin bile salt okunur izinleri nedeniyle olabilir) yüklü olmalıdır.
  • JOYCE API atlayınve Bouncy Castle gibi başka bir şifreleme kitaplığı kullanın. Bu yaklaşım önemli bir yük uygulamaya bağlı olabilir ekstra 1MB bir kütüphane gerektirir. Ayrıca işlevselliği standart kütüphaneler dahil çoğaltmak için saçma geliyor. Açıkçası, API de her zamanki JOYCE arayüzü tamamen farklıdır. (BC JOYCE sağlayıcı uygulamak, ama bu anahtar gücü kısıtlamaları uygulandığı için yardımcı olmuyorönceteslim uygulama için.) Bu çözüm aynı zamanda standart TLS kitaplıkları JOYCE herhangi bir kısıtlama belirlemek için dahili arama çünkü sen 256-bit TLS (SSL) şifreleme paketleri kullanmanıza izin vermez.

Ama sonra yansıması var.Yansıma kullanarak yapamayacağın bir şey var mı?

private static void removeCryptographyRestrictions() {
    if (!isRestrictedCryptography()) {
        logger.fine("Cryptography restrictions removal not needed");
        return;
    }
    try {
        /*
         * Do the following, but with reflection to bypass access checks:
         *
         * JceSecurity.isRestricted = false;
         * JceSecurity.defaultPolicy.perms.clear();
         * JceSecurity.defaultPolicy.add(CryptoAllPermission.INSTANCE);
         */
        final Class<?> jceSecurity = Class.forName("javax.crypto.JceSecurity");
        final Class<?> cryptoPermissions = Class.forName("javax.crypto.CryptoPermissions");
        final Class<?> cryptoAllPermission = Class.forName("javax.crypto.CryptoAllPermission");

        final Field isRestrictedField = jceSecurity.getDeclaredField("isRestricted");
        isRestrictedField.setAccessible(true);
        isRestrictedField.set(null, false);

        final Field defaultPolicyField = jceSecurity.getDeclaredField("defaultPolicy");
        defaultPolicyField.setAccessible(true);
        final PermissionCollection defaultPolicy = (PermissionCollection) defaultPolicyField.get(null);

        final Field perms = cryptoPermissions.getDeclaredField("perms");
        perms.setAccessible(true);
        ((Map<?, ?>) perms.get(defaultPolicy)).clear();

        final Field instance = cryptoAllPermission.getDeclaredField("INSTANCE");
        instance.setAccessible(true);
        defaultPolicy.add((Permission) instance.get(null));

        logger.fine("Successfully removed cryptography restrictions");
    } catch (final Exception e) {
        logger.log(Level.WARNING, "Failed to remove cryptography restrictions", e);
    }
}

private static boolean isRestrictedCryptography() {
    // This simply matches the Oracle JRE, but not OpenJDK.
    return "Java(TM) SE Runtime Environment".equals(System.getProperty("java.runtime.name"));
}

Sadece removeCryptographyRestrictions() herhangi bir şifreleme işlemleri yapmadan önce statik bir başlatıcısı veya çağrı.

JceSecurity.isRestricted = false parçası olduğunu kullanmak için gerekli 256-bit şifreleri doğrudan; ancak, olmayan iki diğer işlemleri, Cipher.getMaxAllowedKeyLength() hala devam raporlama 128 ve 256-bit TLS şifreleme paketleri işe yaramıyor.

Bu kod Oracle TOTEM 7 çalışır ve gerek olmayan yerlere 8, ve otomatik olarak OpenJDK süreci atlar. Sonuçta hack çirkin olmak, muhtemelen diğer satıcılar' VMs işe yaramıyor.

Ayrıca Oracle TOTEM özel JOYCE sınıfları orada gizlenmiştir çünkü 6, çalışmıyor. Bu şaşırtmaca sürüm için olsa değişmez, teknik olarak mümkün TOTEM 6 desteği için çok önemlidir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Dopelives

    Dopelives

    30 Temmuz 2009
  • Lin Steven

    Lin Steven

    17 EKİM 2006