Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

上上篇文章《nginx平滑升级&新增模块》提到了公司的https访问需求。当我新增了SSL模块之后,却发现以前还真没部署过https访问。

下面整理我的部署过程,并收集了一下Apache和Tomcat这2种Linux下常用的WEB软件配置SSL的简单简单步骤,以便回头翻阅。

一、下载证书

成功申请SSL证书之后,就可以下载到配置SSL的证书了!一般情况下,都可以选择下载相应WEB服务器的不同证书,或者直接打包下载主流WEB服务器的证书,如图所示:

Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

下载后,就可以根据不同的WEB服务器来选择相应的证书了。

二、Nginx

先确认nginx安装时已编译http_ssl模块,也就是执行如下命令查看是否存在--with-http_ssl_module参数:

如果没有这个参数,说明没有编译SSL模块,那么请参考上上篇文章自行解决,此处就不赘述了。

①、准备证书

Nginx需要用到2个证书文件:

I.  证书公钥 (crt格式)

II. 证书私钥(key格式)

Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

拿到证书后,将其上传到nginx下的ssl目录(也可自定义位置)。

②、修改配置

A. http和https全局共存

在原server模块新增监听443端口,然后新增如下代码(具体看注释)。

保存配置之后,先执行如下命令测试配置是否正确:

确认无误之后,执行如下命令重载nginx,让配置生效:

如无错误,现在应该可以顺利访问https://yourdomain.com/了!值得说明的是,这样配置后,http和https是全局共存的,你能http访问到的页面,https也可以访问得到。

B. 全局强制https

如果是全局https访问,那么额外写一个监听80的server,让http访问跳转到https上即可,下面是参考模板:

C. 部分强制https,部分强制http

可能有部分强迫症会有这样的需求:我只要部分页面强制https访问,比如后台及登陆页面,其他常规页面强制http访问,我该如何设置?

思路:和B方案一样,分别2个server模块,并新增判断规则,指定部分页面http访问,部分页面https访问。

具体可以参考一下张戈博客的配置主要修改中文注释部分,其他配置保持不变):

二、Apache

同样,先确认Apache安装时已添加SSL支持模块。如果没有请自行搜索搞定,本文不再赘述。

①、准备证书

Apache需要用到三个证书文件:

I. 根证书:root_bundle.crt

II. 证书公钥:yourdomain.com.crt

III. 证书私钥:yourdomain.com.key

Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

将下载好的三个证书文件,上传到apache下的ssl目录中(可自定义位置)。

②、修改配置

I. 编辑httpd.conf文件,取消以下内容的#注释符号:

II. 编辑http-ssl.conf文件,如下修改:

III. 保存退出,并重启Apache即可。

三、Tomcat

①、准备证书

Tomcat只需要用到一个jks格式的证书文件,比如yourdomain.com.jks。

Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

拿到文件后,将其上传到Tomcat下的conf目录中。

②、修改配置

打开conf目录下的server.xml文件,找到以下内容:

去掉前后的注释,并如下修改(或者直接其后添加以下代码亦可):

退出并保存,最后重启Tomcat即可。

四、解决警告

如果网页中存在不带https的资源,比如http协议的js、css或图片,那么访问这个https页面,某些浏览器(比如IE)就会发出警告,提示页面中存在不安全的内容,并且不会加载这些http协议的资源,导致页面错乱等问题:

Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

解决办法:

方法①、使用相对地址

只要将这些http的资源链接,改为相对地址。比如原链接是<img src="http://yourdomain.com/images/demo.png" alt="Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程">那么改成<img src="/images/demo.png" alt="Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程">即可。

方法②、修改网站代码

如果是全局https访问,那么你将网站代码中的链接均改为https好了。如果是http和https混合的,那么准备2套网站文件也行。然后在nginx当中设置不同的root路径。

为了省事,我推荐方法①。

好了,本文就写到这,希望能解您的燃眉之急!

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:21   其中:访客  16   博主  5

  1. 王语双个人站 2 来自天朝的朋友 谷歌浏览器 Windows XP 宁夏银川市 电信

    (●’◡’●)ノ♥~~~路过,继续支持。

  2. 必分享 3 来自天朝的朋友 谷歌浏览器 Windows 7 广东省佛山市顺德区 电信

    不错,好东西,谢谢分享。

  3. 厦门微信营销 3 来自天朝的朋友 谷歌浏览器 Windows XP 福建省厦门市 电信

    来支持了!!

  4. 海蓝辰风 0 来自天朝的朋友 Internet Explorer Windows 7 浙江省杭州市 华数宽带

    有点看不明白,可能技术不到家吧 :sad: 不过文章写得很好,有用得着地方

  5. Adrift 1 来自天朝的朋友 谷歌浏览器 Windows 7 山东省青岛市 联通

    你好,我想问一下,网站当中有一些外链,像版权声明之类的外链,如果有这些外链是不是网站也会报有风险的提示?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省深圳市 联通

      有外链怎么会有风险呢。

  6. 小辉 0 来自天朝的朋友 火狐浏览器 Windows 7 北京市 联通

    真的不错,写的很好

  7. 同盟源 5 来自天朝的朋友 谷歌浏览器 Windows 7 安徽省芜湖市 电信

    有个疑惑,怎么对付百度,现在对https支持不好貌似

  8. 快播电影 2 来自天朝的朋友 火狐浏览器 Windows 10 重庆市 联通

    很不错的教程,非常感谢。

  9. Youth.霖 4 来自天朝的朋友 谷歌浏览器 Windows 10 吉林省 铁通

    共享主机路过 :???:

  10. leejon 2 来自天朝的朋友 谷歌浏览器 Windows 7 广西南宁市 电信

    实在没办法才来寻求帮助了,查了非常多资料,用得是lnmp,百度云,试过沃通,Let’s Encrypt,StartSSL证书,中间有几次配置SSL成功访问,但后来一直是提示:SSL 连接出错,ERR_SSL_PROTOCOL_ERROR,nginx是v1.9.9,清理过浏览器缓存,重启VPS,也试过重新安装lnmp,换系统。始终是报错。。好郁闷,到底是什么问题啊,寻求张戈帮助!!! 如字数过多,请邮件好,谢谢了。
    配置如下:
    server {
    listen 443 ssl http2;
    ssl_certificate /usr/local/nginx/conf/bpplpp.com.crt;
    ssl_certificate_key /usr/local/nginx/conf/bpplpp.com.key;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    server_name bpplpp.com;
    access_log /data/wwwlogs/bpplpp.com_nginx.log combined;
    index index.html index.htm index.php;
    include /usr/local/nginx/conf/wordpress.conf;
    root /data/wwwroot/bpplpp.com;

    location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
    location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
    }
    server {
    listen 80;
    server_name bpplpp.com;
    rewrite ^/(.*) https://$server_name/$1 permanent;
    }

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      改下试试:

      • leejon 2 来自天朝的朋友 谷歌浏览器 Windows 7 广西南宁市马山县 电信

        谢谢张戈指导。测试军哥,运维,tennfy的lnmp,问题依旧。思考细节,以为443端口没开,测试结果相同。现在先暂时不考虑SSL

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          QQ287988783,可以给我看下

  11. 邢台网站建设 3 来自天朝的朋友 谷歌浏览器 Windows 7 河北省邢台市桥东区 联通

    看了文章挺好,留存 申请了 现在的版本说是有中文语言,不知道是不是张戈说的一样?

  12. 邢台网站建设 3 来自天朝的朋友 谷歌浏览器 Windows 7 河北省邢台市桥东区 联通

    这2个证书的用户组和所有者 还有权限是设置成什么?安全

  13. 小杰网络 3 来自天朝的朋友 谷歌浏览器 Windows 7 重庆市 电信

    证书配置完全后访问https出现Welcome to nginx!
    默认路径 不显示网站内容只显示root /usr/local/nginx/html; 路径下的文件。请问怎么解决?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      需要在已有站点的server配置文件中新增ssl配置,而不是nginx.conf

  14. 起点终站 0 来自天朝的朋友 谷歌浏览器 Windows 7 福建省福州市 电信

    学习了。。

  15. YKLA 0 来自天朝的朋友 谷歌浏览器 Linux 河北省石家庄市 电信

    Apache部分开头。
    #LoadModule ssl_module modules/mod_ssl.so
    #Include conf/extra/httpd-ssl.conf

    这个没用吧,第一是找不到这个模块,第二我查别人的2011年的就说当时的apache版本无需修改这个,只要yum install -y mod_ssl 即可。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省深圳市 移动

      多谢提醒,博客才能过来没用过apache,所以Apache是搬运的,并没有验证过。

加载中,请稍候...