实现SSL通信:
1:服务端需要 ①KeyStore(保存服务端私钥)②TrustKeyStore(保存客户端证书)
2:客户端需要 ①KeyStore(保存客户端私钥)②TrustKeyStore(保存服务端证书)
SSL双向认证需要1+2,单向认证仅需1①+2②
单向认证:
双向认证:
自签证书:
keytool操作:
生成服务端私钥
keytool -genkey -alias sslserver -keystore sslserver.keystore
生成服务端证书
keytool -export -alias sslserver -keystore sslserver.keystore -file sslserver.cer
服务端证书导入客户端Trust KeyStore
keytool -import -alias sslserver -keystore sslclient.trust.keystore -file sslserver.cer
生成客户端私钥
keytool -genkey -alias sslclient -keystore sslclient.keystore
生成客户端证书
keytool -export -alias sslclient -keystore sslclient.keystore -file sslclient.cer
客户端证书导入服务端Trust KeyStore
keytool -import -alias sslclient -keystore sslserver.trust.keystore -file sslclient.cer
查看keystore信息
keytool -list -keystore xxx.keystore
查看keystore详细信息
keytool -list -v -keystore xxx.keystore
认证证书:
上述自签SSL证书无法用于H5客户端,访问时:服务端报“no cipher suites in common”,H5客户端报“ERR_SSL_VERSION_OR_CIPHER_MISMATCH”
需要认证机构签发的证书:
认证证书server.crt+server.key转keystore:
openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:nettic -password pass:nettic -name hxsrv -out hxsrv.p12
此keystore仍然只能用于外网访问,内网访问时:服务端握手成功,H5客户端报“ERR_INSECURE_RESPONSE”
申请证书:
申请免费的Let's Encrypt证书
brew install certbot
sudo certbot certonly --standalone --email yanyiming@shhxzq.com -d shhxzq.com
失败:Incorrect validation certificate for tls-sni-01 challenge.
UPDATE:
非对称加密:
keytool -genkey -alias xsrv -dname "CN=shhxzq.com,OU=shhxzq.com,O=shhxzq.com,L=sh,ST=sh,C=cn" -keyalg EC -keysize 160 -validity 1825 -keypass nettic -storepass nettic -storetype PKCS12 -keystore xsrv.p12
对称加密:
keytool -genseckey -alias xsrv -dname "CN=shhxzq.com,OU=shhxzq.com,O=shhxzq.com,L=sh,ST=sh,C=cn" -keyalg AES -keysize 128 -validity 1825 -keypass nettic -storepass nettic -storetype JCEKS -keystore xsrv.jce
-genkey 表示创建密钥,对称加密创建密钥用-genseckey
-alias 密钥别名
-dname 表示密钥的Distinguished Names,表明密钥发行者的身份
CN=your name, OU=organizational unit, O=organization, L=city/locality, ST=state/province, C=country
-keyalg 使用的加密算法,默认DSA,非对称加密DSA(默认)/RSA/EC,对称加密DES/AES
-keysize 密钥长度,默认1024,DSA/RSA(1024),EC(160),AES(128)
-validity 该密钥的有效期,默认为90天
-keypass 生成密钥的密码
-storepass 访问密钥库的密码
-storetype 密钥保存格式,非对称加密PKCS12,对称加密JCEKS
|
-keystore 密钥保存为文件名