网站有限公司免费,windows优化大师软件介绍,wordpress设置域名后403,wordpress建立的博客我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的#xff0c;当然如果你访问的URL压根就错了#xff0c;那谁也没有办法。这个就是所谓的SSL单向认证。但是实际中#xff0c;我们有可能还会验证客户端是否符合要求#xff0c;也就是给我们每个用户颁发一个证书…我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的当然如果你访问的URL压根就错了那谁也没有办法。这个就是所谓的SSL单向认证。但是实际中我们有可能还会验证客户端是否符合要求也就是给我们每个用户颁发一个证书比且每个数字证书都是唯一的不公开的。这样就能通过这个数字证书保证当前访问我服务器的这个用户是经过服务器认可的其他人不可访问。双向认证 从第一个层面上 确保了服务器 与客户端 都是互相认可的。那么他们之间要进行通信就会在通信协议上附加SSL协议确保通信的内容是加密的即使是sniffer这样的网络嗅探工具看到的都是 乱码。以后给大家演示下不加密的情况下用sniffer看到的是什么。恐怕这样你就能提高警惕了。以下内容从网络上摘抄 加以实际验证后修改的。模拟场景Server端和Client端通信需要进行授权和身份的验证即Client只能接受Server的消息Server只能接受Client的消息。实现技术JSSE(Java Security Socket Extension)是Sun为了解决在Internet上的安全通讯而推出的解决方案。它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密服务器验 证消息完整性和客户端验证等技术。通过使用JSSE开发人员可以在客户机和服务器之间通过TCP/IP协议安全地传输数据。为了实现消息认证。Server需要1)KeyStore: 其中保存服务端的私钥2)Trust KeyStore:其中保存客户端的授权证书同样Client需要1)KeyStore其中保存客户端的私钥2)Trust KeyStore其中保存服务端的授权证书在这里我还是推荐使用Java自带的keytool命令去生成这样信息文件。当然目前非常流行的开源的生成SSL证书的还有OpenSSL。 OpenSSL用C语言编写跨系统。但是我们可能在以后的过程中用java程序生成证书的方便性考虑还是用JDK自带的keytool。1)生成服务端私钥并且导入到服务端KeyStore文件中keytool -genkey -alias serverkey -keystore kserver.keystore过程中分别需要填写根据需求自己设置就行keystore密码123456名字和姓氏jin组织单位名称none组织名称none城市或区域名称BJ州或省份名称BJ国家代码CNserverkey私钥的密码不填写和keystore的密码一致。这里千万注意直接回车就行了不用修改密码。否则在后面的程序中以及无法直接应用这个私钥会报错。就可以生成kserver.keystore文件server.keystore是给服务端用的其中保存着自己的私钥2)根据私钥导出服务端证书keytool -export -alias serverkey -keystore kserver.keystore -file server.crtserver.crt就是服务端的证书3)将服务端证书导入到客户端的Trust KeyStore中keytool -import -alias serverkey -file server.crt -keystore tclient.keystoretclient.keystore是给客户端用的其中保存着受信任的证书采用同样的方法生成客户端的私钥客户端的证书并且导入到服务端的Trust KeyStore中1)keytool -genkey -alias clientkey -keystore kclient.keystore2)keytool -export -alias clientkey -keystore kclient.keystore -file client.crt3)keytool -import -alias clientkey -file client.crt -keystore tserver.keystore如此一来生成的文件分成两组服务端保存kserver.keystore tserver.keystore客户端保存kclient.keystore tclient.kyestore以下是通过Java Socket通信程序来验证我们生成的证书是否可用。客户端客户端代码package examples.ssl;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.security.KeyStore;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocket;import javax.net.ssl.TrustManagerFactory;/*** SSL Client**/public class SSLClient {private static final String DEFAULT_HOST 127.0.0.1;private static final int DEFAULT_PORT 7777;private static final String CLIENT_KEY_STORE_PASSWORD 123456;private static final String CLIENT_TRUST_KEY_STORE_PASSWORD 123456;private SSLSocket sslSocket;/*** 启动客户端程序** param args*/public static void main(String[] args) {SSLClient client new SSLClient();client.init();client.process();}/*** 通过ssl socket与服务端进行连接,并且发送一个消息*/public void process() {if (sslSocket null) {System.out.println(ERROR);return;}try {InputStream input sslSocket.getInputStream();OutputStream output sslSocket.getOutputStream();BufferedInputStream bis new BufferedInputStream(input);BufferedOutputStream bos new BufferedOutputStream(output);bos.write(Client Message.getBytes());bos.flush();byte[] buffer new byte[20];bis.read(buffer);System.out.println(new String(buffer));sslSocket.close();} catch (IOException e) {System.out.println(e);}}/*** * ssl连接的重点:* 初始化SSLSocket* 导入客户端私钥KeyStore导入客户端受信任的KeyStore(服务端的证书)* */public void init() {try {SSLContext ctx SSLContext.getInstance(SSL);KeyManagerFactory kmf KeyManagerFactory.getInstance(SunX509);TrustManagerFactory tmf TrustManagerFactory.getInstance(SunX509);KeyStore ks KeyStore.getInstance(JKS);KeyStore tks KeyStore.getInstance(JKS);ks.load(new FileInputStream(E://kclient.keystore), CLIENT_KEY_STORE_PASSWORD.toCharArray());tks.load(new FileInputStream(E://tclient.keystore), CLIENT_TRUST_KEY_STORE_PASSWORD.toCharArray());kmf.init(ks, CLIENT_KEY_STORE_PASSWORD.toCharArray());tmf.init(tks);ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);sslSocket (SSLSocket) ctx.getSocketFactory().createSocket(DEFAULT_HOST, DEFAULT_PORT);} catch (Exception e) {System.out.println(e);}}}服务器端Java代码package examples.ssl;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.security.KeyStore;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLServerSocket;import javax.net.ssl.TrustManagerFactory;/************************************************************************************************************************ * 1)生成服务端私钥* keytool -genkey -alias serverkey -keystore kserver.keystore* 2)根据私钥,到处服务端证书* keytool -exoport -alias serverkey -keystore kserver.keystore -file server.crt* 3)把证书加入到客户端受信任的keystore中* keytool -import -alias serverkey -file server.crt -keystore tclient.keystore* **********************************************************************************************************************//*** SSL Server**/public class SSLServer {private static final int DEFAULT_PORT 7777;private static final String SERVER_KEY_STORE_PASSWORD 123456;private static final String SERVER_TRUST_KEY_STORE_PASSWORD 123456;private SSLServerSocket serverSocket;/*** 启动程序** param args*/public static void main(String[] args) {SSLServer server new SSLServer();server.init();server.start();}/*** * 听SSL Server Socket* 由于该程序不是演示Socket监听所以简单采用单线程形式并且仅仅接受客户端的消息并且返回客户端指定消息* */public void start() {if (serverSocket null) {System.out.println(ERROR);return;}while (true) {try {Socket s serverSocket.accept();InputStream input s.getInputStream();OutputStream output s.getOutputStream();BufferedInputStream bis new BufferedInputStream(input);BufferedOutputStream bos new BufferedOutputStream(output);byte[] buffer new byte[20];bis.read(buffer);System.out.println(new String(buffer));bos.write(Server Echo.getBytes());bos.flush();s.close();} catch (Exception e) {System.out.println(e);}}}/*** * ssl连接的重点:* 初始化SSLServerSocket* 导入服务端私钥KeyStore导入服务端受信任的KeyStore(客户端的证书)* */public void init() {try {SSLContext ctx SSLContext.getInstance(SSL);KeyManagerFactory kmf KeyManagerFactory.getInstance(SunX509);TrustManagerFactory tmf TrustManagerFactory.getInstance(SunX509);KeyStore ks KeyStore.getInstance(JKS);KeyStore tks KeyStore.getInstance(JKS);ks.load(new FileInputStream(E://kserver.keystore), SERVER_KEY_STORE_PASSWORD.toCharArray());tks.load(new FileInputStream(E://tserver.keystore), SERVER_TRUST_KEY_STORE_PASSWORD.toCharArray());kmf.init(ks, SERVER_KEY_STORE_PASSWORD.toCharArray());tmf.init(tks);ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);serverSocket (SSLServerSocket) ctx.getServerSocketFactory().createServerSocket(DEFAULT_PORT);serverSocket.setNeedClientAuth(true);} catch (Exception e) {e.printStackTrace();}}}(转自https://www.cnblogs.com/yqskj/p/3142861.html学习)