開発/テスト サイトでは実行されていませんが、運用サイトでは正常に動作する Web アプリケーションにアプレットがあります。この問題は、Mac Lion のブラウザーからサイトにアクセスしている場合にのみ発生します。MSWin クライアントから実行されているブラウザー (IE、FF、Safari、Opera) には問題はありません。
開発サイトと本番サイトの違いは、本番サイトには SSL 用に購入したサイト証明書があるのに対し、開発サイトには自己署名証明書があることです。SSL を使用しない場合、アプレットは開発サイトでも正常に動作します。
アプリケーションは IIS 7 によって提供されています。Java プラグインが有効になっています (そうしないと、開発ボックスで http または運用ボックスで ssl を使用してアプレットを実行できません)。
アプレット jar 自体は、購入した証明書で署名されています。Web ページは、JavaScript を使用してアプレットと対話します。
HTML ページには、アプレットの次のコードが含まれています。
<object name="Previewer"
class="java-applet"
classid="java:com.[omitted].template.TemplateViewer.class"
type="application/x-java-applet"
archive="../Template/tv/TemplateViewer.jar"
height="425" width="270">
<param name="MAYSCRIPT" value="true" />
<param name="scriptable" value="true" />
<param name="archive" value="../Template/tv/TemplateViewer.jar" />
<!-- following parameters are used by the applet itself -->
<param name="TEMPLATE" value="[url omitted]" />
<param name="VERSION" value="1.7" />
<param name="AREA" value="AreaName" />
<param name="CUSTOMIZABLE" value="Y" />
<param name="BACKGROUND" value="[url omitted]" />
<param name="SHOWDROPDOWN" value="false" />
</object>
Java コンソールは、スタック トレースを提供します (質問の最後にリストされています)。
ClassNotFound 例外がアプレット クラス ローダーによってスローされているのを確認しました。これは、「署名アルゴリズムの不一致」を伴う CertificateException が原因のようです。
数時間の Google の後、私は空白になり、ここで「既に回答がある可能性のある質問」と「同様の質問」をすべて確認しましたが、何の啓発もありませんでした。
私が推測できるのは、一部のモバイル デバイスが SSL によって提供されるメディアを提供することに敏感であるのと同様に、自己署名証明書を使用してサイトにアクセスすることによって、この問題が何らかの原因で発生していることです。
今質問:
この問題の原因は何ですか?
それを修正するために何ができますか?
スタック トレースを含むコンソール ログは次のとおりです。
Java Plug-in 1.6.0_26
Using JRE version 1.6.0_26-b03-383-11A511c Java HotSpot(TM) 64-Bit Server VM User home directory = /Users/[omitted]
----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.
security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws
security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws
security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws,com.sun.deploy
security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws,com.sun.deploy
security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws,com.sun.deploy,com.sun.jnlp
security: property package.definition value null
security: property package.definition new value com.sun.javaws
security: property package.definition value com.sun.javaws
security: property package.definition new value com.sun.javaws,com.sun.deploy
security: property package.definition value com.sun.javaws,com.sun.deploy
security: property package.definition new value com.sun.javaws,com.sun.deploy,com.sun.jnlp
security: property package.access value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws,com.sun.deploy,com.sun.jnlp
security: property package.access new value sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,apple.,com.apple.mrj.,com.apple.jdirect.,com.apple.audio.jdirect.,quicktime.internal.,com.sun.medialib.mlib.,com.sun.javaws,com.sun.deploy,com.sun.jnlp,org.mozilla.jss
security: property package.definition value com.sun.javaws,com.sun.deploy,com.sun.jnlp
security: property package.definition new value com.sun.javaws,com.sun.deploy,com.sun.jnlp,org.mozilla.jss
basic: Added progress listener: sun.plugin.util.GrayBoxPainter$GrayBoxProgressListener@2de12f6d
basic: Plugin2ClassLoader.addURL parent called for https://[URL omitted]/Template/tv/TemplateViewer.jar
network: Cache entry not found [url: https://[URL omitted]/Template/tv/TemplateViewer.jar, version: null]
network: Connecting https://[URL omitted]/Template/tv/TemplateViewer.jar with proxy=DIRECT
network: Connecting http://[URL omitted]:443/ with proxy=DIRECT
javax.net.ssl.SSLProtocolException: Signature algorithm mismatch
at com.sun.net.ssl.internal.ssl.HandshakeMessage$CertificateMsg.<init>(HandshakeMessage.java:412)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
at sun.plugin.PluginURLJarFileCallBack.downloadJAR(PluginURLJarFileCallBack.java:81)
at sun.plugin.PluginURLJarFileCallBack.access$000(PluginURLJarFileCallBack.java:48)
at sun.plugin.PluginURLJarFileCallBack$2.run(PluginURLJarFileCallBack.java:150)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.PluginURLJarFileCallBack.retrieve(PluginURLJarFileCallBack.java:127)
at sun.net.www.protocol.jar.URLJarFile.retrieve(URLJarFile.java:186)
at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:50)
at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:70)
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(CachedJarURLConnection.java:201)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(CachedJarURLConnection.java:145)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(CachedJarURLConnection.java:91)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(DeployURLClassPath.java:752)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$800(DeployURLClassPath.java:631)
at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(DeployURLClassPath.java:698)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(DeployURLClassPath.java:690)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(DeployURLClassPath.java:652)
at com.sun.deploy.security.DeployURLClassPath$3.run(DeployURLClassPath.java:400)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:389)
at com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:366)
at com.sun.deploy.security.DeployURLClassPath.getResource(DeployURLClassPath.java:230)
at sun.plugin2.applet.Plugin2ClassLoader$2.run(Plugin2ClassLoader.java:966)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Plugin2ClassLoader.java:955)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:134)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:250)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:180)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:240)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:180)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:161)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:675)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3046)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.security.cert.CertificateException: Signature algorithm mismatch
at sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1737)
at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:179)
at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:90)
at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:305)
at com.sun.net.ssl.internal.ssl.HandshakeMessage$CertificateMsg.<init>(HandshakeMessage.java:410)
... 48 more
network: Cache entry not found [url: https://[URL omitted]/Template/tv/TemplateViewer.jar, version: null]
network: Connecting https://[URL omitted]/Template/tv/TemplateViewer.jar with proxy=DIRECT
network: Connecting http://[URL omitted]:443/ with proxy=DIRECT
network: Cache entry not found [url: https://[URL omitted]/Template/tv/TemplateViewer.jar, version: null]
network: Connecting https://[URL omitted]/Template/tv/TemplateViewer.jar with proxy=DIRECT
network: Connecting http://[URL omitted]:443/ with proxy=DIRECT
javax.net.ssl.SSLProtocolException: Signature algorithm mismatch
at com.sun.net.ssl.internal.ssl.HandshakeMessage$CertificateMsg.<init>(HandshakeMessage.java:412)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
at sun.plugin.PluginURLJarFileCallBack.downloadJAR(PluginURLJarFileCallBack.java:81)
at sun.plugin.PluginURLJarFileCallBack.access$000(PluginURLJarFileCallBack.java:48)
at sun.plugin.PluginURLJarFileCallBack$2.run(PluginURLJarFileCallBack.java:150)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.PluginURLJarFileCallBack.retrieve(PluginURLJarFileCallBack.java:127)
at sun.net.www.protocol.jar.URLJarFile.retrieve(URLJarFile.java:186)
at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:50)
at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:70)
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(CachedJarURLConnection.java:201)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(CachedJarURLConnection.java:145)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(CachedJarURLConnection.java:91)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(DeployURLClassPath.java:752)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$800(DeployURLClassPath.java:631)
at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(DeployURLClassPath.java:698)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(DeployURLClassPath.java:690)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(DeployURLClassPath.java:652)
at com.sun.deploy.security.DeployURLClassPath$3.run(DeployURLClassPath.java:400)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:389)
at com.sun.deploy.security.DeployURLClassPath.getLoader(DeployURLClassPath.java:366)
at com.sun.deploy.security.DeployURLClassPath.getResource(DeployURLClassPath.java:230)
at sun.plugin2.applet.Plugin2ClassLoader$2.run(Plugin2ClassLoader.java:966)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Plugin2ClassLoader.java:955)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:134)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:250)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:180)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:161)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:675)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3046)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.security.cert.CertificateException: Signature algorithm mismatch
at sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1737)
at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:179)
at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:90)
at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:305)
at com.sun.net.ssl.internal.ssl.HandshakeMessage$CertificateMsg.<init>(HandshakeMessage.java:410)
... 46 more
network: Cache entry not found [url: https://[URL omitted]/Template/tv/TemplateViewer.jar, version: null]
network: Connecting https://[URL omitted]/Template/tv/TemplateViewer.jar with proxy=DIRECT
network: Connecting http://[URL omitted]:443/ with proxy=DIRECT
network: Cache entry not found [url: https://[URL omitted]/Orders/, version: null]
network: Cache entry not found [url: https://[URL omitted]/Orders/com/[omitted]/template/TemplateViewer.class, version: null]
network: Connecting https://[URL omitted]/Orders/com/[omitted]/template/TemplateViewer.class with proxy=DIRECT
network: Connecting http://[URL omitted]:443/ with proxy=DIRECT
network: Cache entry not found [url: https://[URL omitted]/Orders/com/[omitted]/template/TemplateViewer/class.class, version: null]
network: Connecting https://[URL omitted]/Orders/com/[omitted]/template/TemplateViewer/class.class with proxy=DIRECT
network: Connecting http://[URL omitted]:443/ with proxy=DIRECT
basic: load: class com.[omitted].template.TemplateViewer.class not found.
Java Plug-in 1.6.0_26
Using JRE version 1.6.0_26-b03-383-11A511c Java HotSpot(TM) 64-Bit Server VM User home directory = /Users/[omitted] load: class com.[omitted].template.TemplateViewer.class not found.
java.lang.ClassNotFoundException: com.[omitted].template.TemplateViewer.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:252)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:250)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:180)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:161)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:687)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3046)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498)
at java.lang.Thread.run(Thread.java:680)
Exception: java.lang.ClassNotFoundException: com.[omitted].template.TemplateViewer.class
Ignored exception: java.lang.ClassNotFoundException: com.[omitted].template.TemplateViewer.class