A.“碰撞”
异常不是崩溃,也不应该导致应用程序崩溃。这只是糟糕的代码结构和糟糕的异常处理。您需要为每个可接受的套接字启动一个线程,在其运行方法中有自己的异常处理。
B.证书步骤。
#GENERATE KEYS
keytool -genkeypair -alias plainserverkeys -keyalg RSA -dname "CN=Plain Server,OU=kl2217,O=kl2217org,L=Boston,ST=MA,C=US" -keypass password -keystore plainserver.jks -storepass password
keytool -genkeypair -alias plainclientkeys -keyalg RSA -dname "CN=Plain Client,OU=kl2217,O=kl2217org,L=Boston,ST=MA,C=US" -keypass password -keystore plainclient.jks -storepass password
到现在为止,一直都还不错。在这里,您创建或更新了两个密钥库:一个用于服务器,一个用于客户端。
#EXPORT SERVER CERT + IMPORT NEW KEYSTORE
keytool -exportcert -alias plainserverkeys -file serverpub.cer -keystore plainserver.jks -storepass password
keytool -importcert -keystore serverpub.jks -alias serverpub -file serverpub.cer -storepass password
在这里,您已经为客户端创建或更新了信任库。
#EXPORT CLIENT CERT + IMPORT NEW KEYSTORE
keytool -exportcert -alias plainclientkeys -file clientpub.cer -keystore plainclient.jks -storepass password
keytool -importcert -keystore clientpub.jks -alias clientpub -file clientpub.cer -storepass password
在这里,您已经为服务器创建或更新了信任库。
因此,您的意图显然是参与相互认证的SSL。
#EXPORT PLAIN CLIENT CERT + IMPORT TO MAIN JAVA KEYSTORE
keytool -export -alias plainclientkeys -keystore plainclient.jks -rfc -file plainclient.cert
keytool -import -trustcacerts -keystore /usr/java/jdk1.7.0_25/jre/lib/security/cacerts -storepass changeit -noprompt -alias mycert -file plainclient.cert
我不明白你为什么要走这一步。第一个命令只是创建您已经拥有的文件“clientpub.cer”的另一个副本。第二部分将其放入JDK信任库,原因我不理解。你不需要这两个步骤和前两个步骤,只需要前两个或这两个。
但我不明白你为什么要做这四件事中的任何一件。您不需要客户端证书、客户端密钥库和服务器信任库
完全
除非:
-
您已启用
wantClientAuth
或
needClientAuth
在服务器上,以及
-
您已经在Firefox浏览器中安装了客户端证书。