openssl自制证书并配置nginx

概念

key:私钥

csr:证书申请文件,生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。

crt:证书

一般流程

1.创建服务器私钥

2.生成证书请求文件并发送给证书颁发机构(自签代替)获取证书

3.部署

实现

生成(待部署服务器上的)证书

1.创建服务器私钥

openssl genrsa -out server.key 2048 #rsa算法    2048长度
#openssl genrsa -des3 -out server.key 2048 #-des3可选,为server.key设置密码,后续用到此文件时要输入密码

2.生成证书请求文件

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

3.发送给CA获取证书获取签名

此步骤由自制根证书签名代替,步骤如下:

自制CA根证书并模拟颁发证书

1.创建根证书私钥

openssl genrsa -out ca.key 2048

2.创建根证书

openssl req -new -x509 -sha256 -days 365 -key ca.key -out ca.crt
#填写信息的时候CN项(Common Name (e.g. server FQDN or YOUR name))填写本机的hostname即可
#它代表颁发者

#其实上述命令可拆分成两条命令理解
#1.生成证书请求
#openssl req -new -key ca.key -out ca.csr
#2.自签署
#openssl x509 -req -sha256 -days 365 -in ca.csr -signkey ca.key -out ca.crt

3.模拟根证书签名颁发证书

将待部署服务器上生成的请求文件(csr)拿过来

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

特别注意:上述命令生成的证书使用后,浏览器还是会报错:NET::ERR_CERT_COMMON_NAME_INVALID

解决办法:创建文本文件ext.conf,内容如下:

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.110.160
#如果是域名
#DNS.1=www.test.com
openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt \
-CAkey ca.key -CAcreateserial -out server.crt -extfile ext.conf

生成的server.crt即为服务器所需的证书

部署

1.服务器部署

安装好nginx,修改配置/etc/nginx/nginx.conf


    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /userdata/caTest/server/server.crt;
        ssl_certificate_key  /userdata/caTest/server/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

nginx重载配置或重启服务,服务器部署完成。

2.客户端

下载ca.crt,并安装。

 

 

 将ca证书添加信任后,所有由此ca签名的server都会被信任,无需重复添加。

至此,所有配置完成。

效果图:

双向认证

1.生成客户端私钥

openssl genrsa -out client-key.key 2048

2.生成证书请求

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

3.生成客户端证书

openssl x509 -req -in client-req.csr -out client-cert.cer -signkey client-key.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 365


#生成客户端p12格式根证书(密码设置)
openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12

4.配置nginx

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /userdata/caTest/server/server.crt;
        ssl_certificate_key  /userdata/caTest/server/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        #客户端认证
        ssl_client_certificate /userdata/caTest/ca/ca.crt;
        ssl_verify_client on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

5.客户端证书导入

下载client.p12到客户端,导入到浏览器。

设置->安全 ->证书管理->个人->导入->client.p12

### 配置Nginx使用自签名SSL证书Nginx配置自签名SSL证书的过程主要包括以下几个方面:生成自签名证书、安装Nginx确保其支持SSL模块、配置Nginx以加载证书和私钥,以及测试HTTPS连接。以下是详细的说明: #### 1. 确保Nginx支持SSL模块 在配置自签名SSL证书之前,必须确认Nginx编译时启用了`--with-http_ssl_module`模块。可以通过以下命令检查Nginx的编译参数: ```bash nginx -V ``` 如果输出中包含`--with-http_ssl_module`,则表示Nginx支持SSL功能[^5]。 #### 2. 生成自签名SSL证书 可以使用OpenSSL工具生成自签名SSL证书及其对应的私钥。运行以下命令: ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt ``` 上述命令将生成一个有效期为365天的自签名证书(`server.crt`)和私钥文件(`server.key`)。在执行过程中,需要填写一些信息,如国家代码、组织名称等[^2]。 #### 3. 安装Nginx启动服务 在CentOS 7上安装Nginx启动服务,可以运行以下命令: ```bash yum install epel-release -y yum install nginx -y systemctl start nginx ``` 这将安装Nginx启动服务[^3]。 #### 4. 配置Nginx以加载SSL证书 编辑Nginx的主配置文件(通常位于`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/default`),添加或修改以下内容: ```nginx server { listen 443 ssl; server_name localhost; ssl_certificate /path/to/server.crt; # 替换为实际的证书路径 ssl_certificate_key /path/to/server.key; # 替换为实际的私钥路径 location / { root /usr/share/nginx/html; index index.html index.htm; } } ``` 确保将`ssl_certificate`和`ssl_certificate_key`的路径替换为实际生成证书和私钥文件的位置[^4]。 #### 5. 测试配置重启Nginx 保存配置文件后,测试Nginx配置是否正确: ```bash nginx -t ``` 如果没有错误,重启Nginx服务以应用更改: ```bash systemctl restart nginx ``` #### 6. 访问HTTPS页面 打开浏览器访问`https://<服务器IP地址>`,应该能够看到由自签名证书保护的HTTPS页面。由于是自签名证书,浏览器可能会显示安全警告,但可以忽略继续访问[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值