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

    在LNMP或Nginx上配置NameCheap免费SSL

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

    4月底在NameCheap用优惠码注册了一个JunGeHost.com,并且免费赠送了一年的Positive SSL,于是顺便搞上SSL,这样传输数据也更加安全。

    SSL需要有一个独立IP,也就是一个独立IP只能对应一个SSL。(什么是SSL?

    一、准备工作

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

    2、再NameCheap已注册/转移域名或购买主机产品,且购买是在购物车上添加了免费SSL。

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

    1、生成RSA密钥

    li88-99:~# cd /usr/local/nginx/conf/
    li88-99:/usr/local/nginx/conf# openssl genrsa -out jungehost.pem 2048

    Generating RSA private key, 2048 bit long modulus
    .....+++
    .+++
    e is 65537 (0x10001)

    2、生成一个证书请求

    li88-99:/usr/local/nginx/conf# openssl req -new -key jungehost.pem -out jungehost.csr
    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]:JunGe Host   //组织名称或公司名称
    Organizational Unit Name (eg, section) []:          //可以不用填
    Common Name (eg, YOUR name) []:jungehost.com     //输入要配置ssl的域名,如jungehost.com,注意jungehost.com 和www.jungehost.com 属于不同的域名。
    Email Address []:admin@jungehost.com                     //输入邮箱

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

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

    li88-99:/usr/local/nginx/conf# cat jungehost.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,填写jungehost.csr的内容,即前面要求复制下来的以-----BEGIN CERTIFICATE REQUEST-----开头到-----END CERTIFICATE REQUEST-----结尾的内容。

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

    5、提交订单

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

    6、邮箱验证

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

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

    验证完成!

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

    四、Nginx虚拟主机设置SSL

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

    一般情况下,直接用证书签发机构颁发的 crt 文件即可,比如 jungehost_com.crt ,但是有很多证书签发机构默认在 Firefox 中文版下是不会信任的,经过仔细研究,终于发现,原来得把证书签发机构办法给你的 crt 文件也放入才行。(摘自:Showfom)

    方法如下:

    合并 PositiveSSLCA.crt (证书签发机构的 crt) 和 jungehost_com.crt (自己域名的 crt)

    cat  jungehost_com.crt >> PositiveSSLCA.crt

    mv PositiveSSLCA.crt  jungehost_com.crt

    或者直接用记事本打开,然后复制 PositiveSSLCA.crt 里面所有的内容到 jungehost_com.crt 最下方即可。

    2、Nginx虚拟主机添加SSL

    server
    {
    listen      443;
    server_name jungehost.com www.jungehost.com;
    index index.html index.htm index.php;
    root  /home/wwwroot/jungehost;

    ssl on;
    ssl_certificate jungehost_com.crt;
    ssl_certificate_key jungehost.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location ~ .*\.(php|php5)?$
    {
    fastcgi_pass  unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_param  HTTPS on;
    include fastcgi.conf;
    }
    access_log  off;
    }

    将以上内容按照自己的配置修改,添加到在nginx.conf 里任意一个server {}的后面即可。

    然后执行/usr/local/nginx/sbin/nginx -t 检查配置是否有错误,执行kill -HUP `cat /usr/local/nginx/logs/nginx.pid`重启。

    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#kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

    五、测试

    在Chrome、Firefox、IE7下面访问 https://jungehost.com/ 测试均没有问题,欢迎各位测试反馈结果。

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

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

    评论(30条评论)

    1. listen 80;
      listen 443 ssl;
      server_name api.annicoco.com;
      index index.html index.htm index.php default.html default.htm default.php;
      root /home/wwwroot/api.annicoco.com;
      #ssl on;
      ssl_certificate /usr/local/nginx/conf/api_annicoco_com.crt;
      ssl_certificate_key /usr/local/nginx/conf/annicoco.pem;

      # include other.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;
      fastcgi_param HTTPS on;
      #include pathinfo.conf;
      }

      listen 443;
      ssl on;
      这样的组合也试过,也不行

      VPS侦探 回复:

      @小鹏, 看你配置里没有ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    2. https://api.annicoco.com/555.htm

      按照博主的文章,安装了两次了,都报这个错误,大概是怎么回事呀

      Secure Connection Failed

      The connection to api.annicoco.com was interrupted while the page was loading.

      The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
      Please contact the website owners to inform them of this problem.

      VPS侦探 回复:

      @小鹏, 发一下你的配置

    3. 軍哥你好
      我使用後,出現
      nginx: [emerg] open() "/usr/local/nginx/conf/fcgi.conf" failed (2: No such file or directory) in /usr/local/nginx/conf/vhost/bonbg.com.conf:48
      nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

      求教,謝謝!!

      VPS侦探 回复:

      @Bon, lnmp1.1开始已经去除fcgi.conf,使用nginx自带的fastcgi.conf,修改一下就行了。

    4. 您访问的网页出错了!
      (连接错误)
      可能原因:网络连接异常、网站服务器失去响应
      建议操作:刷新重试

      https://www.renhao.pw

      VPS侦探 回复:

      @hoyam, 你服务器上没开443端口吧

    5. 配置没问题,也显示启动成功了,但是HTTPS访问不了网站

      VPS侦探 回复:

      @hoyam, 访问有什么提示信息

    6. # /etc/init.d/nginx restart
      Restarting nginx daemon: nginxEnter PEM pass phrase:

      重启的时候需要输入key的密码的啊?军哥,怎么去掉这个?

      VPSer 回复:

      @Mr.Cong, openssl rsa -in jungehost.pem -out jungehost.pem.unsecure 然后修改nginx配置文件里的ssl_certificate_key 换成新的jungehost.pem.unsecure

    7. Restarting nginx daemon: nginxnginx: [emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:88
      nginx already running.

      附上 nginx.conf 添加的那一段

      server
      {
      listen 443;
      server_name psvps.net http://www.psvps.net;
      index index.html index.htm index.php;
      root /home/wwwroot/www.psvps.net/;

      ssl on;
      ssl_certificate psvps.crt;
      ssl_certificate_key psvps.pem;

      location ~ .*\.(php|php5)?$
      {
      fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_index index.php;
      fastcgi_param HTTPS on;
      include fcgi.conf;
      }
      access_log off;
      }

      VPSer 回复:

      @dahai0401, 按提示你添加的地方不对

    发表评论

    *必填

    *必填 (不会被公开)

    3 + 3 = ?