`
wb284551926
  • 浏览: 551410 次
文章分类
社区版块
存档分类
最新评论

给Nginx配置一个自签名的SSL证书(转载)

 
阅读更多

给Nginx配置一个自签名的SSL证书

廖雪峰 / 编程 / 2014-12-18 19:32 / 阅读: 23

要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择。HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上。

SSL使用证书来创建安全连接。有两种验证模式:

  1. 仅客户端验证服务器的证书,客户端自己不提供证书;

  2. 客户端和服务器都互相验证对方的证书。

显然第二种方式安全性更高,一般用网上银行会这么搞,但是,普通的Web网站只能采用第一种方式。

客户端如何验证服务器的证书呢?服务器自己的证书必须经过某“权威”证书的签名,而这个“权威”证书又可能经过更权威的证书签名,这么一级一级追溯上去,最顶层那个最权威的证书就称为根证书。根证书直接内置在浏览器中,这样,浏览器就可以利用自己自带的根证书去验证某个服务器的证书是否有效。

如果要提供一个有效的证书,服务器的证书必须从VeriSign这样的证书颁发机构签名,这样,浏览器就可以验证通过,否则,浏览器给出一个证书无效的警告。

申请一个证书签名的费用是一年几十~几百刀不等,所以如果只是出于管理目的,可以创建自签名证书,保证管理员通过浏览器安全连接到服务器。

下面简单介绍如何创建一个自签名的SSL证书。

创建自签名证书需要安装openssl,使用以下步骤:

  1. 创建Key;

  2. 创建签名请求;

  3. 将Key的口令移除;

  4. 用Key签名证书。

为HTTPS准备的证书需要注意,创建的签名请求的CN必须与域名完全一致,否则无法通过浏览器验证。

以上步骤命令繁琐,所以我做了一个shell脚本,能一次性把证书搞定。从这里下载脚本:

https://github.com/michaelliao/itranswarp.js/blob/master/conf/ssl/gencert.sh

运行脚本,假设你的域名是www.test.com,那么按照提示输入:

$ ./gencert.sh 
Enter your domain [www.example.com]: www.test.com          
Create server key...
Generating RSA private key, 1024 bit long modulus
.................++++++
.....++++++
e is 65537 (0x10001)
Enter pass phrase for www.test.com.key:输入口令
Verifying - Enter pass phrase for www.test.com.key:输入口令
Create server certificate signing request...
Enter pass phrase for www.test.com.key:输入口令
Remove password...
Enter pass phrase for www.test.com.origin.key:输入口令
writing RSA key
Sign SSL certificate...
Signature ok
subject=/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=www.test.com
Getting Private key
TODO:
Copy www.test.com.crt to /etc/nginx/ssl/www.test.com.crt
Copy www.test.com.key to /etc/nginx/ssl/www.test.com.key
Add configuration in nginx:
server {
    ...
    ssl on;
    ssl_certificate     /etc/nginx/ssl/www.test.com.crt;
    ssl_certificate_key /etc/nginx/ssl/www.test.com.key;
}

红色部分是输入,注意4次输入的口令都是一样的。

在当前目录下会创建出4个文件:

  • www.test.com.crt:自签名的证书
  • www.test.com.csr:证书的请求
  • www.test.com.key:不带口令的Key
  • www.test.com.origin.key:带口令的Key

Web服务器需要把www.test.com.crt发给浏览器验证,然后用www.test.com.key解密浏览器发送的数据,剩下两个文件不需要上传到Web服务器上。

以Nginx为例,需要在server {...}中配置:

server {
    ...
    ssl on;
    ssl_certificate     /etc/nginx/ssl/www.test.com.crt;
    ssl_certificate_key /etc/nginx/ssl/www.test.com.key;
}

如果一切顺利,打开浏览器,就可以通过HTTPS访问网站。第一次访问时会出现警告(因为我们的自签名证书不被浏览器信任),把证书通过浏览器导入到系统(Windows使用IE导入,Mac使用Safari导入)并设置为“受信任”,以后该电脑访问网站就可以安全地连接Web服务器了:

self-signed-cert

如何在应用服务器中配置证书呢?例如Tomcat,gunicorn等。正确的做法是不配置,让Nginx处理HTTPS,然后通过proxy以HTTP连接后端的应用服务器,相当于利用Nginx作为HTTPS到HTTP的安全代理,这样即利用了Nginx的HTTP/HTTPS处理能力,又避免了应用服务器不擅长HTTPS的缺点。

 

附上配置文件

worker_processes  4;

worker_rlimit_nofile 102400;

events

{

    use epoll;

    worker_connections  204800;
}

http

{

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    tcp_nopush     on;

    charset GBK ;

    keepalive_timeout  60;

    server_names_hash_bucket_size 128;

    client_header_buffer_size 2k;

    large_client_header_buffers 4 4k;

    client_max_body_size 8m;
    server_tokens off;
    open_file_cache max=102400 inactive=20s;
     upstream mysvr {
    server 127.0.0.1:11001 weight=1;
    server 127.0.0.1:11002 weight=1;
    }
    server

    {

        listen       80;
        server_name 192.168.2.23;
        location /

        {
          root   html;
          index  index.html index.htm;
        rewrite ^(.*) https://$server_name$1 permanent; #80端口跳转到ssl
        }



        location = /NginxStatus

        {

          stub_status on;

          access_log off;

        }



        error_page   500 502 503 504  /50x.html;



        location = /50x.html

        {

            root   html;

        }

    }
    server

    {

    ssl on;
    listen 443 ssl;
    ssl_certificate     /usr/local/nginx/ssl/admin.myswing.com.crt;
    ssl_certificate_key /usr/local/nginx/ssl/admin.myswing.com.key;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
        ssl_session_timeout  5m;
        location /

        {

          root   html;

          index  index.html index.htm;
         proxy_pass  http://mysvr ;#请求转向mysvr 定义的服务器列表
        }



        location = /NginxStatus

        {

          stub_status on;

          access_log off;

        }



        error_page   500 502 503 504  /50x.html;



        location = /50x.html

        {

            root   html;

        }

    }
}

 原文地址:http://www.liaoxuefeng.com/article/0014189023237367e8d42829de24b6eaf893ca47df4fb5e000

分享到:
评论

相关推荐

    Nginx配置SSL自签名证书的方法

    本文将详细介绍如何在Nginx服务器上配置SSL自签名证书。 首先,我们需要生成自签名SSL证书。这通常包括以下步骤: 1. **生成RSA密钥**:使用`openssl genrsa`命令创建一个带有密码保护的RSA私钥。例如,`openssl ...

    Nginx生成一个自签名的SSL证书脚本

    Nginx生成一个自签名的SSL证书脚本

    Nginx单IP地址配置多个SSL证书的方法示例

    每个SSL证书对应一个域名,这需要在Nginx的配置文件(通常为`nginx.conf`)中的`server`块进行定义。每个`server`块包括监听的端口(通常是443),`server_name`指定要匹配的域名,以及`ssl_certificate`和`ssl_...

    nginx.conf的配置访问ssl证书

    nginx.conf的配置访问ssl证书

    Vue项目部署Nginx配置文件 SSL

    Vue.js 是一个流行的前端开发框架,用于构建交互式的单页应用程序(SPA)。当你的 Vue 项目完成开发并经过 `npm run build` 编译后,生成的静态资源需要部署到服务器上供用户访问。Nginx 是一款高性能的 HTTP 和反向...

    Linux 生成SSL证书 供 nginx使用

    Linux 生成 SSL 证书供 nginx 使用是指通过 OpenSSL 命令生成 SSL 证书的过程,这个过程包括生成私钥、证书请求文件、证书文件和配置 nginx 使用证书。 首先,生成私钥文件使用以下命令:`openssl genrsa -des3 -...

    Nginx配置SSL证书监听443端口

    在Nginx的cert目录下创建一个ssl文件夹,并将下载的证书文件拷贝到这个目录中。 接下来是修改Nginx的配置文件nginx.conf。这个文件通常位于/etc/nginx或/usr/local/nginx/conf等路径下。需要在http{}块中添加一个新...

    nginx配置https的ssl 私钥证书

    或者,为了测试目的,可以自签发一个证书。自签发证书需要生成一对密钥,包括公钥(通常为.crt文件)和私钥(通常是.key文件)。 2. **Nginx配置文件** 在Nginx配置文件(通常位于`/etc/nginx/nginx.conf`或`/usr/...

    nginx、tomcat安装免费ssl安全证书配置

    - 审核通过后,下载证书文件,通常包含一个.pem格式的公钥证书和一个.key格式的私钥文件。对于Nginx,可能还需要一个.crt或者.cer文件。 3. **配置Nginx**: - 编辑Nginx配置文件(如`/etc/nginx/nginx.conf`),...

    ssl证书(nginx+tomcat+java代码适用)

    ssl自制全套证书(包含服务器端、客户端、ca端的证书,格式有.crt,.key,.truststore,.keystore,.p12,.cer,.pem等类型),当时要配置webservice接口、tomca、nginx通过ssl访问的证书,弄了好久才生成了一套能使用的。...

    nginx配置下载SSL证书之后在服务器中配置之后就可以https访问

    3. **创建SSL配置段**:在配置文件中,为你的域名单独创建一个server块。在这个server块中,设置监听443端口(HTTPS默认端口),并添加SSL相关的指令: ``` server { listen 443 ssl; server_name xapi....

    OpenSSL生成的ssl证书

    5. **合并证书和私钥**:为了简化Nginx配置,你可以将证书和私钥合并到一个文件中: ``` cat private.key certificate.crt > server.pem ``` **Nginx配置HTTPS服务器** 1. **编辑Nginx配置文件**:找到Nginx的...

    nginx配置文件,需要添加ssl证书

    nginx一般配置文件,需要添加 SSL 证书,使用 https 方式访问。自动将 http 转为 https访问方式。

    windows下nginx配置https以及同一个端口监听多个网站即监听多个虚拟主机

    - 生成SSL证书:可以使用OpenSSL工具生成自签名证书,或者购买CA签发的证书。例如,使用以下命令生成自签名证书: ``` openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt...

    免费SSL证书申请,Docker容器搭建Nginx配置HTTPS

    申请免费的SSL证书,用docker容器搭建Nginx服务端,详细的Nginx配置ssl证书的方法。

    nginx配置+https

    Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。它以其稳定性、丰富的功能集、简单的配置文件和较低的内存消耗而闻名。 在配置文件中,`worker_processes auto;` 行指定了...

    create-ssl-certificate创建自签名SSL证书的命令行工具

    首先,`create-ssl-certificate`是一个Node.js应用程序,它简化了在本地或开发环境中生成自签名SSL证书的过程。对于Node.js开发者来说,这提供了一个便捷的工具,避免了手动执行复杂的安全命令。 安装`create-ssl-...

    Nginx 应用服务器SSL部署证书视频操作

    **Nginx应用服务器SSL部署证书详解** 在互联网安全日益重要的今天,SSL(Secure Sockets Layer)证书成为了网站必备的安全组件,它能确保用户与服务器之间的通信数据加密,防止数据被窃取或篡改。Nginx作为一款高...

Global site tag (gtag.js) - Google Analytics