网上关于SSL签名认证和服务器端的相关配置文章很多,但是要么讲的不全、不明确,要么讲的又很复杂却不明所以。唉,不多说了,心塞泪啊。。
本文主要介绍:SSL域名证书创建,CentOS服务器下nginx、tomcat关于SSL方面的配置,和过程中遇到的问题的解决方案。
1.SSL域名证书的创建方式
(1)openssl方式
主要指令如下,参考来源:http://www.liuchungui.com/blog/2015/09/25/zi-jian-zheng-shu-pei-zhi-httpsfu-wu-qi/
①生成私钥
openssl genrsa -des3 -out private.key 2048
-des3代表加上了加密,2048代表生成的密钥位数,因为1024已经不是很安全。
②生成证书请求
openssl req -new -key private.key -out server.csr
这一步需要填写一些信息,小心,写错了就得重来一遍!按Backspace删不去光标前的内容。其中Common Name那填写的是你的域名或服务器地址。
③生成服务器私钥,去除密钥口令。好处在于每次重启nginx时无需输入密钥密码。
openssl rsa -in private.key -out server.key
④使用私钥为证书请求签名,生成给服务器签署的证书,格式是x509的PEM格式
openssl x509 -req -in server.csr -out server.crt -outform pem -signkey server.key -days 3650
-outform pem指定证书生成的格式,默认是pem,所以这个命令也可以写作成:
sudo openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650
3650表示有效期限是3650天。
(2)keytool方式(未亲试)
(3)在线生成(推荐)
本人使用的是沃通。网址:https://buy.wosign.com/free/#ssl。方便、快捷并且生成的证书涉面广,包括nginx、tomcat、apache等等的。而传说中的StartSSL试了一下,最后生成了一个邮箱的p12文件。。可能没找对地方。。
2.nginx nginx.conf配置
server {
listen 443 ssl;
server_name 服务器名;
ssl on;
ssl_certificate crt文件位置;
ssl_certificate_key key文件位置;
##以上5行很重要!!
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
##用于跳转到tomcat,因为我要访问的是jsp界面,位置在apache下,之前忽略了这点,以致报了404和405错误。
location ~ (\.jsp)|(\.do)|(\.xjpg)|(\.com)$ {
proxy_pass http://werewholf;proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
3.tomcat server.xml配置
在此,采用的是APR方式。具体APR是啥,自己查吧。
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Connector
port="8443" protocol="HTTP/1.1" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
# SSLCACertificateFile="/www/ssl/Apache/1_root_bundle.crt"
SSLCertificateFile="crt文件"
SSLCertificateKeyFile="key文件"
clientAuth="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>
<!-- Define an AJP 1.3 Connector on port 8009 AJP可以使访问服务器网址时无需写端口号-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
4.主要问题
(1)运行nginx时缺少http_ssl_module
首先nginx/sbin/nginx -V可以查看nginx版本和编译信息
然后参考:http://www.itnpc.com/news/web/146771636486934.html
若编译时出问题,可能是没有安openssl。总之见招拆招吧。
(2)apache启动时报
SEVERE: Failed to initialize the SSLEngine.
org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform
参考:http://stephen830.iteye.com/blog/2112005来一遍应该就行。
5.另附安装tomcat-connectors-1.2.37-src.tar.gz,获取mod_jk.so。