1.centos安装java 1.8.0(自动安装,手动请自行百度)
6.nginx 的ssl证书转换,由.jks转.crt和.key
前置条件:
本地客户端 mac
阿里云购买的域名已备案
阿里云安全组先开放80(nginx),443(nginx),8080(tomcat),8443(tomcat),3306(mysql)等端口,tomcat测试完后,可以关闭8080和8443,避免用户直接访问tomcat。
服务器各系统软件示例版本:
centos 8.3
java 1.8.0
tomcat 10.0.7
nginx 1.20.1
提示:mac下下载tomcat和nginx的tar.gz包,safari下载会自动解压,不要用safari下载,我是使用谷歌浏览器或迅雷下载的。
1.centos安装java 1.8.0(自动安装,手动请自行百度)
首先查询yum上可供安装的java相关sdk
yum -y list java*
安装java版本,如果安装1.8.0的话
yum -y install java-1.8.0-openjdk*
查询安装是否成功
java -version
2.下载filezilla等ftp工具,方便传文件
下载安装传送门:
https://filezilla-project.org/download.php?type=client
选择sftp方式连接服务器
3.安装tomcat 10.0.7
下载tomcat的tar.gz压缩包
下载传送门:
https://tomcat.apache.org/download-10.cgi
利用ftp工具将下载的tomcat上传到服务器的usr/local目录下
解压tomcat压缩包
cd /usr/local
tar -zxv -f apache-tomcat-10.0.7.tar.gz
为文件夹改名(例如修改名为tomcat10)
mv apache-tomcat-10.0.7 tomcat10
启动tomcat测试
cd tomcat10/bin
./startup.sh
关闭tomcat
./shudown.sh
查询端口信息
netstat -lntup
4.tomcat 10.0.7的ssl部署
下载阿里云上的证书,类型为.jks,并修改jks的名字为tomcat
在tomcat目录下创建cert目录
并将jks和密码文件放到cert目录下
用ftp下载/usr/local/tomcat10/conf/下的server.xml到本地
添加
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="/usr/local/tomcat10/cert/tomcat.jks"
certificateKeystorePassword="l9MgFlJj"
type="RSA"
/>
</SSLHostConfig>
</Connector>
并将server.xml上传,重启tomcat
如果需要强制将http使用https
下载/usr/local/tomcat10/conf/下的web.xml
并在</welcome-file-list>后面添加
<security-constraint>
<web-resource-collection>
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
并将web.xml上传,重启tomcat
5.安装nginx 1.20.1
下载传送门:
https://nginx.org/en/download.html
利用ftp工具将下载的nginx的tar.gz上传到服务器的usr/local目录下
解压压缩包
cd /usr/local
tar -zxv -f nginx-1.20.1.tar.gz
下载编译相关工具
yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
编译nginx
cd nginx-1.20.1
./configure –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_v2_module –with-http_sub_module –with-http_gzip_static_module –with-pcre
安装nginx
make && make install
启动nginx
cd /usr/local/nginx/sbin
./nginx
提示:
如果遇到nginx报错open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or director
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
其他命令
正常关闭
./nginx -s quit:
强制关闭
./nginx -s stop:
重启
./nginx -s reload
6.nginx 的ssl证书转换,由.jks转.crt和.key
将tomcat.jsk放置到桌面
keytool -list -keystore tomcat.jks
例如我查到的PrivateKeyEntry名字为alias-key,如果是其他名字,将以下命令中的alias-key修改
转p12
keytool -importkeystore -srckeystore tomcat.jks -srcalias alias-key -destkeystore newkeystore.p12 -deststoretype PKCS12
查看证书库
keytool -deststoretype PKCS12 -keystore newkeystore.p12 -list
提取证书
openssl pkcs12 -in newkeystore.p12 -nokeys -clcerts -out server-ssl.crt
openssl pkcs12 -in newkeystore.p12 -nokeys -cacerts -out gs_intermediate_ca.crt
server-ssl.crt是SSL证书,gs_intermediate_ca.crt是中级证书,俩个合并到一起才是nginx服务器所需要的证书
合并证书
cat server-ssl.crt gs_intermediate_ca.crt >server.crt
提取私钥
openssl pkcs12 -nocerts -nodes -in newkeystore.p12 -out server.key
nginx需要的证书server.crt和私钥server.key就获取到了
7.nginx 1.20.1 ssl的部署
在nginx下创建目录cert,并将server.crt和server.key上传到cert目录下
下载/usr/local/nginx/conf中的nginx.conf到本地修改
80端口重定向到8080端口
server {
listen 80;
server_name localhost;#如果是其他服务器则为域名,一个服务器则用localhost
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:8080; #如果是其他服务器则为域名,一个服务器则用localhost
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_request_headers on;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_connect_timeout 240;
proxy_send_timeout 240;
proxy_read_timeout 240;
}
}
添加443端口,并重定向到8443端口
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://localhost:8443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_request_headers on;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_connect_timeout 240;
proxy_send_timeout 240;
proxy_read_timeout 240;
}
}