網上關於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。