一次等保测评,我们的外网环境应要求需要加上ssl证书。
现有条件分析:
单机部署,nginx控制访问,那只要在nginx上修改了。
一、安装ssl
1:上机器看环境
/usr/local/nginx/conf/nginx.conf
server {
listen 8088;
server_name mydomain.cn;
root /home/tomcat/webapps/front;
location /front{
proxy_pass http://ip:port;
}
......
}
直接用的端口,这个不影响。
2:尝试添加ssl(已有证书pem和key)
server {
listen 8088;
server_name mydomain.cn;
root /home/tomcat/webapps/front;
ssl_certificate ../cert/mydomain.cn.pem;#对应证书的pem(对应位置)
ssl_certificate_key ../cert/mydomain.cn.key;#对应证书的key(对应位置)
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM- SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /front{
proxy_pass http://ip:port;
}
......
}
重启nginx,结果报错ssl_certificate 找不到,原因是nginx的ssl模块没有。
3.尝试添加ssl模块
查看nginx版本信息
发现确实没有ssl模块:with-http_ssl_module
网上查到的一些方法是通过./configure命令重新编译加模块,不适用yum直接安装的版本。
4.通过下载同版本nginx进行编译并替换
先备份一下原先的nginx
cp -r /usr/local/nginx/ /usr/local/nginx-bak/
根据刚才的版本号下载同版本nginx
cd /opt
wget http://nginx.org/download/nginx-1.9.1.tar.gz
tar -xvzf nginx-1.9.1.tar.gz
进入到nginx-1.9.1文件夹
cd nginx-1.9.1
#加上在看版本号的本机已经安装的configure arguments后面的模块,记得都加上不要漏
./configure --prefix=/usr/sbin/nginx --with-http_ssl_module
#不要make install
make
如果make有报错 下面是一些报错的缺失模块,对应安装一下
yum -y install libxml2 libxml2-devel libxslt-devel gd gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data
yum -y install --skip-broken gcc gcc-c++ autoconf automake gperftools
yum -y install --skip-broken zlib zlib-devel openssl-devel pcre-devel
yum -y install pcre*
编辑生成的nginx执行文件在objs文件夹里面
暂停nginx
/usr/local/nginx/sbin/nginx -s stop #暂停失败可能是因为ssl配置没有注释掉,先注释掉
将nginx执行文件替换掉
cp -f objs/nginx /usr/local/nginx/sbin/
启动nginx并配置ssl证书,重启nginx,成功!
二、http访问自动跳转到https
利用nginx 497状态码来跳转,完整配置如下
server {
listen 8088;
server_name mydomain.cn;
root /home/tomcat/webapps/front;
# http跳转到https
error_page 497 https://$host:8088$uri?$args;
ssl_certificate ../cert/mydomain.cn.pem;#对应证书的pem(对应位置)
ssl_certificate_key ../cert/mydomain.cn.key;#对应证书的key(对应位置)
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM- SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /front{
proxy_pass http://ip:port;
}
......
}
测试成功!!!