近日一个项目上客户方要求使用https来进行传输的加密,然后客户方一个也不懂技术的负责人直接丢过来一个证书的压缩包,包含了:CA.cer、服务器证书.cer、中级CA.cer、***cn.key 、***.cn.csr、csr.txt、私钥.txt 等一堆文件,因为之前https证书只是试验的时候通过自建CA服务器和在tomcat上通过java生成key进行试验过,线上使用还是第一次,然后里面还没有个说明(其实,事后接触一次以后发现使用挺简单,说明可有可无),这里记录一下,留待以后再有使用的时候可以返过来参考,因为项目管理比较严格,不适宜截图,以下内容都为文字介绍。
关于SSL的介绍接这些证书格式的介绍可以参考博客:https://www.cnblogs.com/guogangj/p/4118605.html
对于证书的生成及使用流程大概描述一下:
通过证书提供机构的CSR生成工具来生成csr证书请求,生成以后会有一个csr文件和一个key文件生成(基本都是图形化操作,过程不再介绍),需要保存好这俩文件。当然,如果不使用证书提供机构的csr工具来生成的话,也可以使用openssl工具和java的keytool来进行生成。
参考链接(之前测试的时候做的,比较粗糙):https://blog.csdn.net/woshiji594167/article/details/79696003 ;
然后将生成的csr证书请求发送给证书提供机构,证书提供机构会根据申请的类型进行相应的审核,然后审核通过后会将相应的签名证书发送给申请者(是需要审核通过之后,登陆证书提供机构的网站进行下载的);
此时下载的证书包中即包含以上片头列出来的证书:CA.cer、服务器证书.cer、中级CA.cer 。。。
剩下的步骤就是需要将证书配置到web服务器或者应用中间件,具体如下:
Apache配置:
打开apache安装目录下conf目录中的httpd.conf文件,查找“LoadModule ssl_module”如下:
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd_ssl.conf
删除行首的配置语句注释符号“#”
保存退出。
打开apache安装目录下conf/extra目录中的httpd_ssl.conf(或conf目录中的ssl.conf)文件
在配置文件的 …… 之间添加或编辑如下配置项
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLCertificateFile conf/server.crt 将服务器证书配置到该路径下
SSLCertificateKeyFile conf/**.cn.key 将服务器证书私钥配置到该路径下
然后配置一个virtualHost,注释掉文件中的virtualHost标签对
保存退出,并重启Apache
通过https方式访问您的站点,测试站点证书的安装配置。
Nginx配置:
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate server.pem;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#启用TLS1.1、TLS1.2要求OpenSSL1.0.1及以上版本,若您的OpenSSL版本低于要求,请使用 ssl_protocols TLSv1;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
保存退出,并重启Nginx。
Tomcat配置:
tomcat配置涉及到需要将证书格式进行转换(tomcat不能直接使用cer证书,需要转换为jks证书),一般证书提供机构官网也提供此种工具:需要提供服务器证书和私钥文件,若有私钥文件还需要提供私钥密码,然后还需要设置转出以后的证书密码。 当然也可以使用java的keytool工具进行生成转换。具体可以参考:https://www.chinassl.net/ssltools/keytool-commands.html
使用keytool工具列出**.cn.jks的内容(keytool位于jdk的bin目录下,若未设置环境变量需要使用命令的绝对路径):
keytool -list -keystore /asop/soft/**.cn.jks -storepass password
此时可以看到jks里面已经有了一个证书信息(server.cer的证书内容已经通过证书格式转换的时候导入进来了),此时还需要将中级CA证书的内容导入进jks证书中:
keytool -import -alias ca1 -keystore /asop/**.cn.jks -trustcacerts -storepass password -file /asop/soft/zhongjica.cer -noprompt
将jks证书移动到tomcat的conf下。
修改tomcat的conf/server.xml文件中的https连接器信息
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="443" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="conf\keystore.jks" keystorePass="password"
clientAuth="false" sslProtocol="TLS"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" />然后重新启动tomcat,访问443端口来访问应用。