English |
  • 美国VPS主机推荐
  • |
  • 代购服务
  • |
  • 10美元以下VPS
  • |
  • VPS新手指南/教程
  • |
  • 留言板
  • |
  • 关于
  • | 登录 |

    在LNMP或Nginx上配置NameCheap免费SSL证书

    2010年05月16日 下午 | 作者:VPS侦探

    简单来说HTTP协议传输是不安全的,可能会存在被劫持(如运营商或其他劫持者劫持来插入广告),HTTPS是一直相对来说要安全一些的,使用SSL证书来加密传输数据。目前有很多SSL证书的获取途径,如namecheap购买域名赠送(Comodo PositiveSSL)、Let's Encrypt、其他免费SSL证书和自购等渠道。

    SSL需要有一个独立IP,也就是一个独立IP只能对应一个SSL。SNI技术的出现,一个IP只能对应一个SSL的时代早就已经过去,目前除了XP及较老的安卓版本外都已经支持SNI,实现多域名虚拟主机的SSL/TLS认证。(什么是SSL?

    一、准备工作

    1、需要Nignx已经编译ssl 模块(lnmp一键安装包已经编译安装上),如果没有需要重新编译,方法可以参考Nginx无缝升级

    2、再NameCheap已注册/转移域名或购买主机产品,且购买是在购物车上添加了免费SSL(PositiveSSL)。如果有其他自购的证书步骤是基本差不多的。

    二、使用OpenSSL生成证书 (注:一下蓝色加粗字为执行时输入的命令!)

    1、生成RSA密钥和CSR证书,下面以vpser.net域名为例:

    vpser:~# cd /usr/local/nginx/conf/
    vpser:/usr/local/nginx/conf# openssl req -new -sha256 -newkey rsa:2048 -nodes -keyout www.vpser.net.key -out www.vpser.net.csr

    Generating RSA private key, 2048 bit long modulus
    .....+++
    .+++
    e is 65537 (0x10001)
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----

    Country Name (2 letter code) [AU]:CN //输入国家简写
    State or Province Name (full name) [Some-State]:ShanDong //省市
    Locality Name (eg, city) []:JiNan                             //城市
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:VPSer   //组织名称或公司名称
    Organizational Unit Name (eg, section) []:          //可以不用填
    Common Name (eg, YOUR name) []:www.vpser.net     //输入要配置ssl的域名,如www.vpser.net,注意vpser.net.com 和www.vpser.net 属于不同的域名,目前一般写带www的,不www的会自动给加上。
    Email Address []:admin@vpser.net                     //输入邮箱

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:         //可以不用填
    An optional company name []:             //可以不用填

    按上面的注释输入相关信息后,会在目录下面生成vpser.net.csr这个文件,执行cat www.vpser.net.csr
    将下面以-----BEGIN CERTIFICATE REQUEST-----开头到-----END CERTIFICATE REQUEST-----结尾的全部内容复制下来。我们需要使用这个www.vpser.net.csr文件里面的内容去NameCheap生成SSL证书。

    li88-99:/usr/local/nginx/conf# cat www.vpser.net.csr
    -----BEGIN CERTIFICATE REQUEST-----
    MIIBzTCCATYCAQAwgYwxCzAJBgNVBAYTAkNOMREwDwYDVQQIEwhTaGFuRG9uZzEO
    MAwGA1UEBxMFSmlOYW4xEjAQBeNVBAoTCUp1bkdlSG9zdDEOMAwGA1UECxMFanVu
    Z2UxEjAQBgNVBAMTCVNoaUp1baBMaTEiMCAGCSqGSIbcDQEJARYTYWRtaW5AanVu
    Z2Vob3N0LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0R9hda1NJdoO
    2tbvHevVY3fdpdn8ESpSewHC9yc9zVoc0tz9Ww5EfpDV9L222xv/Z8DlDf2pUfIG
    X7F15qIQJZ/VCUDNxS5Y7bjNTzduMq8yQnqkB6h/dpnlFTJlDQrAl6vaoOhBcB5L
    hMLAQBf1V8800MIn3nfxb9E6aoydSk8CAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4GB
    AJxQOaFHra/ILos8+HO8Wn/2bhfWAUR4ovyRGKMB/n0BQlHPfNhKbILRv9KI5EUL
    dc6HCf3AALetjNiPHrfpJOCj4Ljqchu3WeodthuwRd9hzhZHCf43UiopofbfRzMp
    lmAJFuUwN93IgFSrslCh66JaQceNa5x/TQIsmviuKZGC
    -----END CERTIFICATE REQUEST-----

    三、NameCheap生成数字证书

    1、登录NameCheap.com后,会在后台首页提示你有一个未激活的SSL认证产品,如下图:

    点击上面的“SSL Certificates Page”链接。

    2、激活SSL证书

    点击“Activate Now”即可激活SSL产品。

    3、向CA(数字证书颁发机构)提交OpenSSL生成的证书。

    Web服务器软件没有Nginx,只有选择other,下面的csr,填写www.vpser.net.csr的内容,即前面要求复制下来的以-----BEGIN CERTIFICATE REQUEST-----开头到-----END CERTIFICATE REQUEST-----结尾的内容,是全部包括----的开头,且不要改动文件内容。

    4、选择域名管理员邮箱,邮箱必须是能够接收到邮件。同时确认一下生成证书时填写的信息是否正确。

    5、提交订单

    检查一下上面的信息是否正确,然后点击“Submit Order”。

    6、邮箱验证

    过几分钟或10几分钟邮箱里就会受到一封Comodo寄来的验证邮件,如下图:

    点开上面的链接,然后输入上面的优惠码。

    验证完成!

    7、验证完成后几分钟就会受到Comodo寄来的数字证书。

    四、Nginx虚拟主机设置SSL

    1、下载邮件附件里的www_vpser_net.zip,上传到/usr/local/nginx/conf 下面。

    vpser.net-ssl-zip.2016

    2017年2月update:压缩包内文件有些变化,变化后只有两个文件:www_vpser_net.crt和www_vpser_net.ca-bundle。

    合并方法:cat www_vpser_net.crt www_vpser_net.ca-bundle > www.vpser.net.crt

    因为这是COMODO的证书,还需要一些合并操作,方法如下:

    cat www_vpser_net.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt > www.vpser.net.crt

    COMODO的证书不要将AddTrustExternalCARoot.crt合并到www.vpser.net.crt的证书里,要不然ssllabs测试时会提示:Chain issues - Contains anchor

    2、Nginx虚拟主机添加SSL

    具体完整配置文件如下:

    server
    {
    listen 443 ssl;   //如果需要spdy也可以加上,lnmp1.2及其后版本都默认支持spdy,lnmp1.3 nginx 1.9.5以上版本默认支持http2
    server_name www.vpser.net vpser.net;     //这里是你的域名
    index index.html index.htm index.php default.html default.htm default.php;
    root /home/wwwroot/www.vpser.net;            //网站目录
    ssl_certificate /usr/local/nginx/conf/www.vpser.net.crt;    //前面邮件收到zip文件合并操作后的文件
    ssl_certificate_key /usr/local/nginx/conf/www.vpser.net.key;   //前面生成的密钥
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    include wordpress.conf;  //这个是伪静态根据自己的需求改成其他或删除
    #error_page 404 /404.html;
    location ~ [^/]\.php(/|$)
    {
    # comment try_files $uri =404; to enable pathinfo
    try_files $uri =404;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;     //lnmp 1.0及之前版本替换为include fcgi.conf;
    #include pathinfo.conf;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    }

    location ~ .*\.(js|css)?$
    {
    expires 12h;
    }

    access_log off;
    }

    将以上内容按照自己的配置修改,LNMP一键安装包用户添加到/usr/local/nginx/conf/vhost/域名.conf 文件最后面,其他用户按实际情况而定,一般加在nginx.conf 里任意一个server {}的后面即可。

    然后执行/usr/local/nginx/sbin/nginx -t 检查配置是否有错误,执行/usr/local/nginx/sbin/nginx -s reload 重新载入配置文件使其生效。

    li88-99:/usr/local/nginx/conf# /usr/local/nginx/sbin/nginx -t
    the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    configuration file /usr/local/nginx/conf/nginx.conf test is successful
    li88-99:/usr/local/nginx/conf#/usr/local/nginx/sbin/nginx -s reload

    另外如果有iptables之类的防火墙需要将443端口加入运行的规则里。

    如果想让http的访问都调到https上,不再允许http访问的话可以将原来80的虚拟主机配置替换为如下配置:

    server {
    listen 80;
    server_name www.vpser.net;
    return 301 https://www.vpser.net$request_uri;
    }

    五、测试

    在Chrome、Firefox、IE7下面访问 https://www.vpser.net 测试均没有问题,欢迎各位测试反馈结果。如果是完整只https访问的话一般还需要修改网站后台的设置,一下模板上写死的地址等。

    PS:需要SSL且不想花费太多的话,可以选择NameCheap注册或转入域名获得免费SSL,VPS侦探也会在网站上不定期更新一些NameCheap域名优惠码

    >>转载请注明出处:VPS侦探 本文链接地址:https://www.vpser.net/manage/namecheap-free-ssl-nginx.html
    VPS侦探推荐:
    遨游主机Linode搬瓦工OAH新加坡VPSLOCVPSDiaHostingKVMLAVPS2EZBudgetVMVultr美国VPS主机
    欢迎加入VPS侦探论坛交流:https://bbs.vpser.net

    发表评论

    *必填

    *必填 (不会被公开)

    6 + 6 = ?

    评论(32条评论)

    1. 用了多种方法都不行,看了军哥的文章突然发现,nginx的配置放在最外面了,一时看错了浪费了很多时间。目前就要弄网页内的图片等素材的https://了

    2. 顺序反了,所以出现评论中的问题,应该是
      cat PositiveSSLCA.crt >> jungehost_com.crt
      一步即可

    3. 🙁 🙁 一直是这个错误

      /usr/local/nginx/sbin/nginx -t
      [emerg]: SSL_CTX_use_PrivateKey_file("/usr/local/nginx/conf/nodesvpscom.pem") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
      configuration file /usr/local/nginx/conf/nginx.conf test failed

      VPSer 回复:

      @mikj, 按楼下的方法手动合并crt文件试试

    4. 很详细的教程 谢谢

    5. 军哥,按照你的方法在nginx.conf配置了,但是貌似只能显示静态网页,动态php文件就提示No input file specified.,查了这种提示的解决方法貌似都无效啊,求教

      VPSer 回复:

      @安之, 到bbs.vpser.net 发上配置看看,可能是没加上php的解析执行部分。

    6. cat jungehost_com.crt >> PositiveSSLCA.crt
      mv PositiveSSLCA.crt jungehost_com.crt
      用这个合并会出问题
      最后手动合并解决的 :mrgreen: :mrgreen:

    7. [emerg]: SSL_CTX_use_PrivateKey_file("/usr/local/nginx/conf/52t.pem") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
      configuration file /usr/local/nginx/conf/nginx.conf test failed

      求解~~

    8. 同样的结果

      /usr/local/nginx/sbin/nginx -t
      [emerg]: SSL_CTX_use_PrivateKey_file("/usr/local/nginx/conf/tuitecn.pem") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
      configuration file /usr/local/nginx/conf/nginx.conf test failed

      Yeasiz 回复:

      @Yeasiz, 好吧,发现之前的问题也是我提出来的。。。到现在还没解决。。。

      VPSer 回复:

      @Yeasiz, 我感觉是生成的RSA密钥有问题,重新生成试试

    9. /usr/local/nginx/conf/nginx.conf test failed
      我的也是这个 ,请教博主怎么修改啊

      VPSer 回复:

      @慢性咽炎, 后面肯定还有那个地方有错误,都有提示,发上来。

    10. 你好,請問一下我在配置之後,使用/usr/local/nginx/sbin/nginx -t檢查,發現有以下錯誤:

      [emerg]: SSL_CTX_use_PrivateKey_file("/usr/local/nginx/conf/biebercn.pem") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
      configuration file /usr/local/nginx/conf/nginx.conf test failed

      請問如何修正?感謝~

    11. 😀 😀 谢谢学习了