一、什么是https
HTTP就是我们平时浏览网页时候使用的一种协议,HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security)1.0,定义在RFC 2246。
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。
相关链接:
www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html
blog.youkuaiyun.com/clh604/article/details/22179907
二、几个关键字
TLS:传输层安全协议 Transport Layer Security的缩写SSL:安全套接字层 Secure Socket Layer的缩写
TLS与SSL对于不是专业搞安全的开发人员来讲,可以认为是差不多的,这二者是并列关系
KEY 通常指私钥。
CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
CRT 即 certificate的缩写,即证书。
X.509 是一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是包含有关用户或设备及其相应公钥的信息。
X.509的证书文件,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:
1、PEM - Privacy Enhanced Mail,查看格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码.
Apache和*NIX服务器偏向于使用这种编码格式.
2、DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.
Java和Windows服务器偏向于使用这种编码格式
相关链接:www.cnblogs.com/yjmyzz/p/openssl-tutorial.html
三、证书的获取
证书之间是可以相互转换的可以到阿里云上获取免费的证书,注意证书的域名绑定要正确,等待证书的审核,已经签发之后将证书下载,要对应所使用的服务器
这个是对应tomcat服务器下载下来的证书
可以按照阿里云的教程,将pfx转换成jks格式,或者可以使用在线工具用pem和key生成jks
在线工具:https://www.trustasia.com/tools-cert-converter
从生成的jks导出crt证书
keytool -export -file (证书crt存放的路径) -alias (别名) -keystore (jks的路径)
回车后输入之前的填写的密码
如果提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么请输入密码:changeit
四、对于java中如果使用 HttpClient 访问https 可以使用以下命令导入到jre中作为信任证书
相关链接:www.2cto.com/os/201506/408625.html找到安装jdk的路径,在这个文件夹下,这是linux下的jdk路径:/opt/jdk1.8.0_91/jre/lib/security 里面有一个cacerts,要用到
相关链接:www.willrey.com/support/keytool_command.html
查看里面的证书,每个证书对应一个昵称
keytool -list -keystore cacerts
enter keystore password:changeit(通用密码,都有用)
导入证书
keytool -import -keystore cacerts -file (证书crt存放路径) -alias (昵称)
删除证书
keytool -delete -keystore cacerts -alias (昵称)根据昵称删除里面对应的证书
五、配置tomcat服务器
Tomcat 8.5 之前版本
Tomcat 8.5 之后版本
注意:
1、如果是部署在云服务器上的网站,最好是html5的网页类型,而且里面不能有http的链接
2、查看防火墙是否对外开放了443端口(我使用的系统是CentOS 7.2 64位,可能防火墙方面的指令和其他版本有区别,在此声明下)
附:
1 :NSS和SSL常见错误码:
相关链接:www-archive.mozilla.org/projects/security/pki/nss/ref/ssl/sslerr.html(此处可能会在使用curl命令时有用到)
2 :ifconfig 命令用来查看和配置网络设备。
3 :查看防火墙状态 ,在bin目录下运行systemctl status firewalld
4 :获取防火墙相关指令帮助 firewall -cmd --help
5 :对外开放443端口 firewall-cmd --add-port=443/tcp --permanent
6 :重启防火墙systemctl restart firewalld
7 :在tomcat安装目录bin下关闭tomcat:./shutdown.sh 启动tomcat:./startup.sh
8 :查看tomcat服务是否开启:ps -ef|grep tomcat 杀掉线程:kill -9 (线程)
9 :netstat -ntpl 和 netstat -ano|grep LISTEN 查看端口状态,都可以试试
10:curl -v https://www.baidu.com获取网页信息
参考链接:
http://www.2cto.com/os/201506/408625.html
https://linux.cn/article-3807-1.html
https://bugzilla.redhat.com/show_bug.cgi?id=1185708
http://blog.sina.com.cn/s/blog_6b5b4a480101gajz.html
https://www.qcloud.com/document/product/400/4143#4.-tomcat-.E8.AF.81.E4.B9.A6.E9.83.A8.E7.BD.B2
http://www.cnblogs.com/zery/p/5164795.html
http://lixor.iteye.com/blog/1532655
这是我写的第一篇博客,结合自己在实际配置过程中遇到的问题做的总结,肯定存在一些错误,欢迎大家批评指正!