https证书搭建

Linux 发表时间:2019-11-26 16:22:29 作者:梁子亮 浏览次数:738

1、去阿里云生成免费的ssl证书

https://yundunnext.console.aliyun.com/?spm=5176.2020520101.aliyun_sidebar.10.63dc4df5pBPmsw&p=cas#/overview/cn-hangzhou


2、下载生成的证书包含两个文件.pem和.key,但在nginx配置中需要用到.crt文件。因此要将证书上传腾讯云转换为.crt后缀:

a、打开腾讯云ssl:https://console.cloud.tencent.com/ssl

b、将.pem文件中的内容复制到证书中

c、将.key证书中的内容复制到私钥中。

d、最后点击上传,上传完成后,可以重新在腾讯云下载证书,进入Nginx证书目录查看,即为crt文件的证书

注:生成的.crt证书内容其实跟.pem内容是一样的。所以应该可以直接改后缀名就可以(已验证)。


3、将生成的.crt文件和.key文件上传到自己服务器,通常保存在nginx下的ssl文件夹,在nginx配置ssl证书时使用。


4、示例一,在vhost下修改项目配置文件,与现有80端口的server配置并列写入(即有80端口和443端口两个server配置),其中443配置如下:

server
 {
         listen 443 ssl;
         server_name aaa.xxx.com;
         ssl on;   #设置为on启用SSL功能。
         index index.html index.htm index.php;
         root  /home/wwwroot/ar/public;
                 include /home/wwwroot/nginx_rewrite.conf;
         #error_page   404   /404.html;
         ssl_certificate /usr/local/nginx/ssl/3142918_ar.wanaot.com.crt;   #将domain name.pem替换成您证书的文件名。
         ssl_certificate_key /usr/local/nginx/ssl/3142918_ar.wanaot.com.key;   #将domain name.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 ~ [^/]\.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;
                        #include pathinfo.conf;
                }

        location /nginx_status {
                stub_status on;
                access_log   off;
        }

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

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

        access_log  /home/wwwlogs/access.log;

  }

4、示例二

server
{
    listen 443 ssl;
    server_name aaa.xxx.com;
    ssl on;   #设置为on启用SSL功能。
    index index.html index.htm index.php;
    root  /home/wwwroot/zhimeikm;
    include /home/wwwroot/nginx_rewrite.conf;
    #error_page   404   /404.html;
    ssl_certificate /usr/local/nginx/ssl/4820241_zhimeikm.com.crt;   #将domain name.pem替换成您证书的文件名。
    ssl_certificate_key /usr/local/nginx/ssl/4820241_zhimeikm.com.key;   #将domain name.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 ~ [^/]\.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;
        #include pathinfo.conf;
    }

    location /nginx_status {
        stub_status on;
        access_log   off;
    }

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

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

    access_log  /home/wwwlogs/access.log;

}

5、http重定向https在80端口的配置文件中加入:

rewrite ^(.*)$ https://$host$1 permanent;

配置如下:

server

{

listen 80 ;

server_name aaa.xxx.com

index index.html index.htm index.php;

root /home/wwwroot/website;

include /home/wwwroot/nginx_rewrite.conf;

rewrite ^(.*)$ https://$host$1 permanent; // 加入的跳转文件

#error_page 404 /404.html;

#其他的配置

}


6、重启nginx

期间若报以下错误

Starting nginx... nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /usr/local/nginx/conf/vhost/ar.zhimeikm.conf:43

则直接注释掉 ssl on; 这句即可


总结:

1-申请证书(如果使用的是云主机,可在阿里云或者腾讯云申请较为方便)。腾讯云颁发证书的速度更快。

2-将证书上传至Nginx所在服务器

3-配置Nginx SSL