Nginx和openssl的配置以及秘钥和证书的生成

Nginx和openssl的配置以及秘钥和证书的生成

前期准备阶段:需要文件nginx-1.8.1.zip,openssl-1.0.1.tar.gz,nginx-sticky-module-1.1.tar.gz,pcre-8.35.zip,zlib-1.2.11.tar.gz。

注:所有需要的压缩包将统一放到nginx-1.8.1.zip中,这样方便后期使用。

一. 配置Nginx+ openssl-1.0.1 + nginx-sticky-module-1.1 + pcre-8.35 + zlib-1.2.11。

1.      解压Nginx-1.8.1.zip:

输入命令:unzipNginx-1.8.1.zip

2.      解压文件Nginx-1.8.1目录下的文件openssl-1.0.1.tar.gz。

输入命令:

cd Nginx-1.8.1

tar -xvzfopenssl-1.0.1.tar.gz

3.      生成配置文件目录。

输入命令:mkdirnginx_openssl_sbin

4.      对Nginx-1.8.1中的配置文件添加可执行权限。

输入命令:chmod +xconfigure

5.      对pcre中的配置文件添加可执行权限,需要进入pcre-8.35目录中。

首先删除pcre-8.35所有的文件,再重新解压一份:

rm -fr pcre-8.35

unzip pcre-8.35.zip

如果pcre-8.35目录中的configure没有可执行权限,需要添加可执行权限,如果有可执行权限,就不需要执行下面命令。

输入命令:

chmod +x pcre-8.35/configure

6.      配置nginx+openssl+pcre+sticky。

输入命令:

./configure --add-module=./nginx-sticky-module-1.1--prefix=./nginx_openssl_sbin --with-pcre=./pcre-8.35--with-openssl=./openssl-1.0.1 --with-http_ssl_module

注1:如果已经安装了nginx,只要补充ssl模块,命令为:
./configure --prefix=./nginx_openssl_sbin --with-openssl=./openssl-1.0.1 --with-http_ssl_module

然后进行make,然后把obj里的文件覆盖到nginx原执行文件路径。

注:此处需要zlib库,如果你电脑已经安装了,上一句命令就会执行成功。如果命令执行失败,就说明你电脑里面没有zlib库,就去安装,首先查看当前文件夹下是否有zlib的压缩包,如果有解压安装即可,如果没有那就从网上下载。安装命令如下。

         下载命令:wget http://www.zlib.net/zlib-1.2.11.tar.gz

         解压:tar -xvzf zlib-1.2.11.tar.gz

         进入zlib-1.2.11目录中:cdzlib-1.2.11

         执行命令:

         make

         make install

         离开zlib-1.2.11目录,进入Nginx-1.8.1:cd ..

         重新输入命令即可执行配置:

         ./configure--add-module=./nginx-sticky-module-1.1 --prefix=./nginx_openssl_sbin--with-pcre=./pcre-8.35 --with-openssl=./openssl-1.0.1 --with-http_ssl_module

         接着进行编译和安装:

         输入命令:make

         输入命令:make install


注:配置命令的解释。

--add-module=./nginx-sticky-module-1.1:表示配置sticky模块,添加的nginx-sticky-module-1.1模块源代码的位置位于当前目录下的nginx-sticky-module-1.1文件中。

--with-pcre=./pcre-8.35:表示配置pcre模块,添加的pcre-8.35模块源代码的位置位于当前目录下的pcre-8.35文件中。

--with-openssl=./openssl-1.0.1 --with-http_ssl_module:表示添加的openssl-1.0.1模块源代码的位置,此处是表示配置openssl模块,该模块位于当前目录下的openssl-1.0.1文件中,添加的模块内容是--with-http_ssl_module。

--prefix=./nginx_openssl_sbin:生成结果存放的位置在当前目录下的nginx_openssl_sbin文件夹内。

7.      我们进入nginx_openssl_sbin目录查看是不是生成了配置文件。

输入命令:lsnginx_openssl_sbin

如果里面有内容就说明生成成功。


 

二. 配置openssl以及生成服务器端和客户端秘钥、证书等相关信息。

如果已经成功执行步骤一,请直接执行请跳过下面第1个执行命令,直接从第二个执行命令开始执行。

因为步骤一已经配置了openssl,所以可以直接执行openssl命令,产生证书等信息。

1.      配置openssl。

进入openssl目录,并执行配置命令:

cd openssl-1.0.1

./config

make

make install

cd ..

2.      我们在nginx_openssl_sbin目录下创建一个名为https的文件夹并进入该文件夹。

mkdir nginx_openssl_sbin/https

cd nginx_openssl_sbin/https/


3.      生成服务器的私钥:

openssl genrsa -des3 -out server.key 2048

注:

1.      openssl rsa -in server.key -outserver.key执行这个命令之后,再启动nginx时,就无需输入密码。

2.      在下面两个位置中我输入的密码是iflytek。注意输入的内容不会显示。

Enter pass phrase for server.key:

Verifying - Enter passphrase for server.key:

4.      用server.key生成一个证书

openssl req -new -key server.key -out server.csr

生成的csr 文件交给CA机构签名后,形成服务器自己的证书。按照提示,提供服务器证书的相关信息。包括国家名,省名,市名,组织名,邮箱地址等信息。

注:如果需要对客户端进行生成秘钥和证书,那么对客户端也做同样的命令生成key及csr文件。否则没有必要生成。

         输入命令:

openssl genrsa -des3 -out client.key 2048

openssl req -new -key client.key -out client.csr

5.      生成CSR证书文件必须有CA 机构的签名才可以形成证书。这里制作自己的CA生成一个key文件CA.key和一个根证书ca.crt

openssl req -new -x509 -keyout ca.key -out ca.crt

        

6.      创建openssl.conf生成的配置文件,可以通过输入下面命令来完成。

注:再生成的过程中如果出现没有CA目录的错误,请先创建一个CA目录,输入命令:mkdir/etc/pki/CA。如果没有错误,直接执行以下命令即可。

生成配置文件:touch/etc/pki/CA/{index.txt,serial}

设置副本名称开始内容:echo01 > /etc/pki/CA/serial

设置副本证书存放目录:mkdir/etc/pki/CA/newcerts    (如果已经存在,则不需要创建)

7.      用CA的证书为刚才生成的server.csr和 client.csr进行文件签名

a:为服务器颁发证书

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfileca.key

注:该命令执行后需要选择两次[y/n],我们输入y,即可。

         b: 如果需要为客户端颁发证书,则颁发证书。我们暂时不需要。

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfileca.key

8.      查看证书信息

a:查看服务器证书

openssl x509 -in server.crt -noout -text


 

b:查看客户端证书

openssl x509 -in client.crt -noout -text

9.      服务器和客户端分别使用的文件,目前我们仅需要使用server端的文件,客户端的不需要。

server 端使用的文件有:     ca.crt, server.crt,server.key

client 浏览器需要使用的文件:ca.crt,client.crt,client.key,client.pfx

10.  配置Nginx SSL。

进入nginx_openssl_sbin/conf/中。

从文件夹https中出来,进入conf文件夹中:cd../conf/

然后编辑文件nginx.conf:vim nginx.conf

去掉下面这些注释,并且添加相关内容:

server{undefined

        listen          443 ssl;

        server_name    0.0.0.0;

        ssl on;

        ssl_certificate          ../https /server.crt; #加载服务端证书

        ssl_certificate_key      ../https /server.key; #加载服务器私钥

        ssl_client_certificate    ../https /ca.crt;     #加载CA证书

        ssl_verify_client       off;

        ssl_session_timeout     5m;

        ssl_protocols   SSLv2SSLv3 TLSv1;

        ssl_ciphers     HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers   on;

        location / {undefined

            index index.php index.html;

        }

        location ~ \.php$ {undefined

            include         /etc/nginx/fastcgi_params;

            if (-f $request_filename) {undefined

                fastcgi_pass   127.0.0.1:9000;

            }

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        }

}

如果我们要配置我们自己的配置文件,那么我们需要把如下信息:

        listen           443 ssl;

        server_name     0.0.0.0;

        ssl on;

        ssl_certificate          ../https /server.crt;

        ssl_certificate_key       ../https /server.key;

        ssl_client_certificate     ../https /ca.crt;

        ssl_verify_client       off;

        ssl_session_timeout     5m;

        ssl_protocols   SSLv2 SSLv3 TLSv1;

        ssl_ciphers     HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers   on;

放置到我们对应的之前已经配置好的nginx.conf中。

比如说配置到如下的nginx.conf中,配置完成nginx后需要重启nginx服务。

#       listen       1028;

#       server_name  0.0.0.0;

        listen       443 ssl;

        server_name  0.0.0.0;

        ssl on;

        ssl_certificate        ../https/server.crt;

        ssl_certificate_key    ../https/server.key;

        ssl_client_certificate ../https/ca.crt;

        ssl_verify_client       off;

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;

        fastcgi_buffer_size 8k;

        fastcgi_buffers 8 32k;

        proxy_max_temp_file_size 0;

        proxy_buffer_size 8k;

        proxy_buffers 8 32k;

#       msp_buffer_size 8k;

11.  重启配置后的nginx。

输入命令:pkill -9 nginx

然后进入nginx_openssl_sbin/sbin目录下启动:./nginx

三.其他(此部分的信息只为大家能够了解,不需要配置)

1.证书格式转换

#IE浏览器需要p12证书,所以需要签发p12证书,用于IE签发:

opensslpkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

#IOS 证书签发格式

opensslx509 -in client.crt -out client.cer

#Android证书签发格式

opensslpkcs12 -export -in client.crt -inkey client.key -out  client.pfx

#pem格式证书

opensslpkcs12 -export -in ddmdd_a.pfx -out client.pem

2. 删除私钥密码:

#删除私钥密码

opensslrsa -in client.key -out client_open.key

3. 证书撤销

echo01 >  crlnumber

opensslca -keyfile ca.key -cert ca.crt -revoke client.crt  #从CA中撤销证书client.crt

opensslca -gencrl -keyfile ca.key -cert ca.crt -out client.crl  #生成或更新撤销列表

4. 客户端导入证书

证书安装及使用把刚才生成的证书: 根证书ca.crt和客户端client.crt(client.pfx)安装到客户端,ca.crt安装到信任的机构,client.crt直接在windows 安装或安装到个人证书位置。(如果是IE浏览器,需要安装client.pfx证书,在导入的时候需要输入证书签发的密码)

原文链接:https://blog.csdn.net/stf1065716904/article/details/73200786

你可能感兴趣的:(linux,nginx,运维,linux)