1. 做为文件形式存在的证书通常有这几种格式:
1.带有私钥的证书
由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx做为证书文件后缀名。
2.二进制编码的证书
证书中没有私钥,DER 编码二进制格式的证书文件,以cer做为证书文件后缀名。
3.Base64编码的证书
证书中没有私钥,BASE64 编码格式的证书文件,也是以cer做为证书文件后缀名。java
用keystool建立一个密钥库,里面含有demo-server的公钥与私钥.bash
1. keytool -genkey -v
-
alias
demo-server -keyalg RSA -keystore ./server_ks -dname
"CN=localhost,OU=cn,O=cn,L=cn,ST=cn,C=cn"
-storepass server -keypass 123123
服务器
导出demo-server的数字证书,证书有会有demo-server的公钥
socket
2. keytool -
ideexport
-
alias
demo-server -keystore ./server_ks -
file
server_key.cer
编码3. 把2生成的demo-server的数字证书导入到demo-client的密钥库./client_ks中
spakeytool -
import
-trustcacerts -
alias
bluedash-ssl-demo-server -
file
./server_key.cer -keystore ./client_ks
.net这样客户端就能够与服务端通讯了.
code服务器端须要设定javax.net.ssl.keyStore/javax.net.ssl.keyStorePassword两个系统参数
server而客户端须要设定javax.net.ssl.trustStore/javax.net.ssl.trustStorePassword两个系统参数
- //server
- System.setProperty("javax.net.ssl.keyStore", SERVER_KEY_STORE);
- System.setProperty("javax.net.ssl.keyStorePassword", SERVER_KEY_STORE_PASSWORD); SSLServerSocketFactory factory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
- SSLServerSocket _socket = (SSLServerSocket)factory.createServerSocket(8443);
- _socket .accept();
- //client
- System.setProperty("javax.net.ssl.tructStore", SERVER_TRUST_STORE);
- System.setProperty("javax.net.ssl.tructStorePassword", SERVER_TRUST_STORE_PASSWORD); SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
- SSLSocket _socket = (SSLSocket)factory.createSocket("localhost",8443);
对于双向认证而言,两个端点既作为服务端,也作为客户端。这时四个系统参数都须要设定。从字面自己的意思就能够理解,keyStore存储自已的私钥,用于代表自已的身份,而trustStore存储我能够信任的其余人公钥。咱们通常所说的单向认证,就是客户端去认证服务端,服务端须要keyStore存储私钥,而客户端则须要把服务端的公钥加入可信任认证列表,即trustStore中