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