启动脚本将设置
java.ext.dirs为自己的目录集(特定于应用程序),但省略了驻留的“普通”扩展目录(
$JAVA_HOME/jre/lib/ext/)
sunjce_provider.jar。这说明了您的第一点(将Jar文件复制到lib目录中使其再次可见)。这很容易复制。
关于第二点,我认为这是由于启动脚本使用该
-Djava.security.policy选项设置的策略文件。某些提供程序是否可用取决于策略文件。默认策略文件使SunJCE提供程序可用,但是由于启动脚本要求使用非默认的自定义策略文件,因此一切正常。我建议您看一下该策略文件。
例如,在我的系统(Ubuntu Linux,Ubuntu打包的Sun JVM
1.6.0_20)上,默认策略文件位于其中,
/etc/java-6-sun/security/java.security并且(其中包括)以下几行:
security.provider.1=sun.security.provider.Sunsecurity.provider.2=sun.security.rsa.SunRsaSignsecurity.provider.3=com.sun.net.ssl.internal.ssl.Providersecurity.provider.4=com.sun.crypto.provider.SunJCEsecurity.provider.5=sun.security.jgss.SunProvidersecurity.provider.6=com.sun.security.sasl.Providersecurity.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRIsecurity.provider.8=sun.security.smartcardio.SunPCSC
定义默认情况下应提供哪些提供程序。从您的症状来看,我认为除非明确注册,否则自定义策略文件将使SunJCE不可用(这是可以理解的,因为启动脚本还删除了对包含SunJCE的Jar文件的访问…)。



