Проблемы смешивания подписанного и неподписанного кода в одном пакете - PullRequest
0 голосов
/ 05 мая 2011

все.Насколько я знаю, в JVM некоторые классы подписаны, а некоторые не находятся в одном пакете, что запрещено.Но как насчет этого сценария: я пишу приложение Java Web Start, в котором есть только один файл jar, например «test.jar».В test.jar я пишу собственный загрузчик классов, который загружает классы с помощью байтового кода (конечно, они не подписаны) из сети или жесткого диска.Некоторые из классов из байтового кода, загруженного во время выполнения, находятся в том же пакете, который существует в test.jar.Может ли это работать?Другой вопрос: как и где JVM проверяет, какие классы подписаны, а какие нет, а подписанные классы подписаны одним и тем же подписавшим?Я думаю, что информация должна исходить только из файла MANIFEST.MF в jar-файле, поскольку содержимое файлов .class, подписанных и неподписанных, не имеет различий, верно?Благодарю.Я не очень хорошо знаю механизм подписания JAR, но я хочу.Поэтому, пожалуйста, помогите мне, любые отзывы будут очень благодарны.

1 Ответ

1 голос
/ 05 мая 2011

Реализация для проверки сертификата существует в java.lang.Classloader классе среды выполнения Java.Он не может быть переопределен просто пользовательским загрузчиком классов, поскольку этот процесс реализован как шаблон разработки шаблона, а процесс проверки сертификата реализован в частном методе - checkCerts (String name, CodeSource cs), идущем от источника класса.Возможным механизмом переопределения поведения по умолчанию было бы переопределение метода defineClass в пользовательском загрузчике классов;по моему личному мнению, я считаю этот вариант чреватым риском (из-за возможного воздействия на модель безопасности), поэтому рекомендуется принять надлежащие меры предосторожности, если этот шаг должен быть выполнен.

Было бы очевидно, что Classloaderкласс в среде выполнения - это класс, который отвечает за проверку согласованности использования сертификатов для пакета.Реализация использует Map для хранения сертификатов, по одному для каждого пакета, с первым загруженным классом любого пакета, определяющим сертификат, который должен использоваться всеми остальными классами, присутствующими в этом пакете.

Если один должен был разрешить разныеклассы в одном и том же пакете должны иметь разных подписчиков, тогда я бы посоветовал понять модель безопасности, используемую (и построенную) во время выполнения, так как воздействие не обязательно ограничивается только собственным классом Classloader.

...