nginx+ca+https设置【草稿试验版】

前言

请参考:

【HTTPS】自签CA证书 && nginx配置https服务

OpenSSL生成证书对

抄录如下:

OpenSSL具体安装及使用此文中不再累赘,请参考网上相关文档。

首先生成X509格式的CA自签名证书 
$openssl req -new -x509 -keyout myca.key -out myca.crt –days  90
生成SSL客户端的私钥(key文件)及csr文件 
$openssl genrsa -des3 -out SSL.key 1024 –days 90
$openssl req -new -key SSL.key -out SSL.csr –days 90
用生成的CA的证书为刚才生成的SSL.csr文件签名 
$openssl ca -in SSL.csr -out SSL.crt -cert myca.crt -keyfile myca.key –days 90
生成p12格式证书 
$openssl pkcs12 -export -inkey SSL.key -in SSL.crt -out SSL.pfx
完成以上操作后在当前目录下会有六个文件,分别是myca.crt,myca.key,SSL.crt,SSL.csr,SSL.key,SSL.pfx。其中CA的公钥myca.crt 和用户的私钥 SSL.pfx是我们需要的文件。 

如果在这步出现错误信息:
[weigw@TEST bin]$ openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key 
Using configuration from /usr/share/ssl/openssl.cnf I am unable to access the ./demoCA/newcerts directory ./demoCA/newcerts: No such file or directory 
[weigw@TEST bin]$ 
自己手动创建一个CA目录结构:
[weigw@TEST bin]$ mkdir ./demoCA
[weigw@TEST bin]$ mkdir demoCA/newcerts
创建个空文件:
[weigw@TEST bin]$ vi demoCA/index.txt

创建文件:
[weigw@TEST bin]$ vi demoCA/serial

向文件中写入01

并且第二行空一行

解决自建ca认证后浏览器警告

用openssl自做CA自签发SSL证书

openssl、x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼?

使用OpenSSL生成CSR文件,并申请全球通用SSL证书

OPENSSL生成SSL自签证书

Nginx下配置Https证书详细过程

nginx配置ssl证书实现https和http共存访问

https和http共存的nginx配置

在这里插入图片描述

基本概念

KEY 通常指私钥。

CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。

CRT 即 certificate的缩写,即证书。

X.509 是一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。

X.509的证书文件,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:

PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码.
Apache和*NIX服务器偏向于使用这种编码格式.

DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.
Java和Windows服务器偏向于使用这种编码格式

OpenSSL 相当于SSL的一个实现,如果把SSL规范看成OO中的接口,那么OpenSSL则认为是接口的实现。接口规范本身是安全没问题的,但是具体实现可能会有不完善的地方,比如之前的"心脏出血"漏洞,就是OpenSSL中的一个bug.

key 私钥,csr 公钥,crt 证书

过程

首先,我们要先新建一个 文件目录:

mkdir -p /etc/pki/CA/
cd /etc/pki/CA/

为什么偏要这个目录??额,我也不知道不过,
在这里插入图片描述

这个目录想必是openssl默认位置了。放在一起方便点吧。

在这里插入图片描述

注意,1024位已经不安全了啊,现在要2048了,请参考:
在这里插入图片描述

所以我们认真输入:

openssl genrsa -des3 -out ca.key 2048

顺便填写密码:
在这里插入图片描述

然后,生成crt–公钥。

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

顺便填写一些信息:
请参考:
openssl、x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼?
在这里插入图片描述

common name应该要填你的域名,下面这位兄弟也遇到:
解决自建ca认证后浏览器警告

在这里插入图片描述

好了,我们本地测试,先记着,

在这里插入图片描述

已经成功生成了私钥key以及CA公钥即CA根证书,然后,

生成HTTPS证书私钥
openssl genrsa -des3 -out server.pem 2048

在这里插入图片描述

生成签名请求
openssl req -new -key server.pem -out server.csr

注意,最后会问你
A challenge password ?
意思是;
在这里插入图片描述

好了,自行设置以后:

在这里插入图片描述
成功生成 csr—公钥,也是证书签名请求文件。

用CA进行签名
-- openssl ca -policy policy_anything -days 3650 -cert ca.crt -keyfile ca.key -in server.csr -out ca.crt
这里犯了一个很严重的问题!-out xxx.crt 是目标文件,不要让他覆盖 原本的 ca.crt!!!
openssl ca -policy policy_anything -days 3650 -cert ca.crt -keyfile ca.key -in server.csr -out wangwangwang.crt

然后,问题1出现:
在这里插入图片描述

ca: ./demoCA/newcerts is not a directory
./demoCA/newcerts: No such file or directory

解决方案:
在这里插入图片描述

在这里插入图片描述

于是:

mkdir -p demoCA/newcerts
touch  demoCA/index.txt
touch demoCA/serial
echo  '01'>demoCA/serial


在这里插入图片描述

然后继续执行:
在这里插入图片描述

注意!!!
这里犯了一个很严重的问题!-out xxx.crt 是目标文件,不要让他覆盖 原本的 ca.crt!!!

于是勤奋的lz重新做了一次,然后终于得到我们的重要目标文件了:
在这里插入图片描述

nginx配置https

在这里插入图片描述

好了,刚才生成的crt以及pem分别是:

/etc/pki/CA/wangwangwang.crt
/etc/pki/CA/server.pem

然后我们主要修改这些内容:

server {
            listen 80;
            listen 443 ssl;
            #server_name zou.lu;
            #root /var/www/html;
            
            #ssl on;   //这行必须要注释掉
            ssl_certificate /etc/pki/CA/wangwangwang.crt;
            ssl_certificate_key /etc/pki/CA/server.pem;
            
        }

修改为:
在这里插入图片描述

重启:

nginx -s reload

在这里插入图片描述

额。。竟然要输入密码,太不方便了!!!
好,我们输入密码试试。

在这里插入图片描述

访问主页:
http形式:
在这里插入图片描述

https方式:
在这里插入图片描述

无法访问。。

不可能,我们一步一步按照网上教程来做,于是重启一下看看:
在这里插入图片描述

好,问题出现了:

 SSL_CTX_use_PrivateKey_file("/etc/pki/CA/server.pem") failed (SSL: error:2807106B:UI routines:UI_proces

nginx ssl 证书报错

在这里插入图片描述

h好了,我们改改:

openssl rsa -in ca.key -out no-pwd-ca.key  

在这里插入图片描述

然后,更名:

mv ca.key ca-with-pwd.key
mv no-pwd-ca.key ca.key

在这里插入图片描述

重启:

在这里插入图片描述

额。。不行,所以,还是正正经经再来一个crt证书算了。

证书重制

强烈推荐:
如何为nginx配置https(免费证书)

嗯,这个可以一步到位了。。

下面是抄录:

如何为nginx配置https(免费证书)【抄录部分】

一、我们需要什么证书
之前写过一篇《tomcat https配置方法(免费证书)》的简书(想看的可以去我的主页里面看下,这两篇之间还是有许多相关联的知识的~),里面有提到过常用证书的分类,其中nginx使用的就是PEM格式的证书,我们将其拆分开就是需要两个文件,一个是.key文件,一个是.crt文件.
二、怎样获取免费证书
这里提供两个方法:
第一种:如果你是windows用户,且有.keystore格式的证书
那么你可以使用JKS2PFX转换工具,将你的keystore证书转换为PEM证书,操作方法为:cd到工具目录,然后运行命令:
$ JKS2PFX <KeyStore文件> <KeyStore密码> <Alias别名> <导出文件名>

第二种:如果你是Linux或者OSX系统

生成秘钥key,运行:

$ openssl genrsa -des3 -out server.key 2048

会有两次要求输入密码,输入同一个即可

输入密码

然后你就获得了一个server.key文件.
以后使用此文件(通过openssl提供的命令或API)可能经常回要求输入密码,如果想去除输入密码的步骤可以使用以下命令:
$ openssl rsa -in server.key -out server.key

创建服务器证书的申请文件server.csr,运行:

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

image

其中Country Name填CN,Common Name填主机名也可以不填,如果不填浏览器会认为不安全.(例如你以后的url为https://abcd/xxxx…这里就可以填abcd),其他的都可以不填.

创建CA证书:

openssl req -new -x509 -key server.key -out ca.crt -days 3650

此时,你可以得到一个ca.crt的证书,这个证书用来给自己的证书签名.

创建自当前日期起有效期为期十年的服务器证书server.crt:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

ls你的文件夹,可以看到一共生成了5个文件:
ca.crt ca.srl server.crt server.csr server.key
其中,server.crt和server.key就是你的nginx需要的证书文件.

三、如何配置nginx

打开你的nginx配置文件,搜索443找到https的配置,去掉这段代码的注释.或者直接复制我下面的这段配置:

server {

listen       443;
    server_name  localhost;
    ssl                  on;
    ssl_certificate     /root/Lee/keys/server.crt;#配置证书位置
    ssl_certificate_key  /root/Lee/keys/server.key;#配置秘钥位置
    #ssl_client_certificate ca.crt;#双向认证
    #ssl_verify_client on; #双向认证

    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

将ssl_certificate改为server.crt的路径,将ssl_certificate_key改为server.key的路径.
nginx -s reload 重载配置

至此,nginx的https就可以使用了,默认443端口.

作者:夜_雪
链接:https://www.jianshu.com/p/9523d888cf77
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值