服务器 > 网络 > SSL

NGINX使用OpenSSL自签证书实现HTTPS安全访问-完整版

91人参与 2024-08-06 SSL

自己折腾了很久, 网上的教程都不是很全, 特意整理记录 --> 2024-04-28

安装nginx

nginx官网

https://nginx.org/

选择你自己需要的版本, 我们这里使用最新版
可以下载本地上传或者直接服务器下载
在这里插入图片描述
在这里插入图片描述
下载完成后上传至服务器/nginx目录或者直接在服务器下载
先安装通用开发包

yum groupinstall "development tools"
#安装完成后
cd nginx/
#直接在服务器下载命令
#wget https://nginx.org/download/nginx-1.26.0.tar.gz
tar -zxvf nginx-1.26.0.tar.gz 
cd nginx-1.26.0/
#prefix设置nginx安装路径 并且开启http和https模块支持
./configure --prefix=/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
#安装完成后启动nginx
/nginx/sbin/nginx
#删除多余安装包
rm -rf nginx-1.26.0*

启动后访问http://ip 如果端口被占用 修改/nginx/conf/nginx.conf中http模块的监听端口
在这里插入图片描述

安装openssl

#修改为你自己的目录
mkdir -p /www/server/openssl
cd /www/server/openssl
wget http://www.openssl.org/source/openssl-1.0.0a.tar.gz
tar zxvf openssl-1.0.0a.tar.gz
cd openssl-1.0.0a
#设置openssl的安装路径
./config –prefix=/www/server/openssl
make && make install

注意有可能会报pod2man的错, 删除就行, 没报错就跳过

#删除pod2man
ll /usr/bin/pod2man 
rm -f /usr/bin/pod2man 
make && make install

生成ca自签证书

mkdir -p /nginx/ssl
cd /nginx/ssl/
1. 生成根证书的私钥
首先,您需要为根证书生成一个私钥。这通常是一个rsa或ec私钥。
* 注意 centos8 秘钥长度低于2048位会报错 
openssl genpkey -algorithm rsa -out root_private_key.pem -pkeyopt rsa_keygen_bits:4096
2. 创建根证书的csr和自签名证书
接下来,使用根证书的私钥生成一个证书签名请求(csr),并自签名该csr以生成根证书。
其中cn=my root ca 可以修改为你需要的根域名
# 创建根证书的csr  
openssl req -new -key root_private_key.pem -out root_csr.pem -subj "/c=us/st=california/l=san francisco/o=my root ca/cn=my root ca"
在下面的命令中,-extensions v3_ca 指示 openssl 使用名为 v3_ca 的扩展配置。
需要创建一个包含这些扩展的配置文件,并在其中定义 v3_ca 段落
可以写在服务器证书配置的openssl.cnf文件中, 下面为了好区分所以分开写:
vim v3_ca
#添加下面文本
[v3_ca]  
basicconstraints = ca:true  
keyusage = keycertsign, crlsign
#保存后运行下面命令生成根证书
# 自签名根证书的csr以生成根证书  
openssl x509 -req -days 3650 -in root_csr.pem -signkey root_private_key.pem -out root_certificate.pem -extensions v3_ca
3. 生成服务器证书的私钥
现在,需要为服务器证书生成一个单独的私钥。
openssl genpkey -algorithm rsa -out server_private_key.pem -pkeyopt rsa_keygen_bits:2048
4. 创建服务器证书的csr
使用服务器证书的私钥生成一个csr。
将cn=100.70.84.6修改为你自己的域名或ip
如果这里填写的ip/域名和 你服务器访问的ip/域名不匹配,证书始终无效
openssl req -new -key server_private_key.pem -out server_csr.pem -subj "/c=us/st=california/l=san francisco/o=my company/cn=100.70.84.6"
5. 使用根证书签发服务器证书
最后,使用根证书和根证书的私钥签发服务器证书的csr,以生成最终的服务器证书。
在下面的命令中,-extensions v3_req -extfile openssl.cnf 指示 openssl 使用配置文件
(如 openssl.cnf)中定义的 v3_req 段落来添加v3扩展。您需要在配置文件中定义这些扩展,例如:
vim openssl.cnf
#添加以下内容
[v3_req]  
keyusage = digitalsignature, keyencipherment  
extendedkeyusage = serverauth  
subjectaltname = @alt_names  
#服务器使用的域名和服务器ip
[alt_names]  
dns.1 = feng.com  
dns.2 = www.feng.com
dns.2 = *.feng.com
dns.2 = 100.70.84.6
ip.1 = 100.70.84.6
#保存后生成服务器证书
openssl x509 -req -in server_csr.pem -ca root_certificate.pem -cakey root_private_key.pem -cacreateserial -out server_certificate.pem -days 3650 -extensions v3_req -extfile openssl.cnf

6. 验证证书
最后,您可以验证生成的根证书和服务器证书。
# 验证根证书  
openssl x509 -in root_certificate.pem -text -noout  
  
# 验证服务器证书  
openssl x509 -in server_certificate.pem -text -noout
请注意,这只是一个基本的示例,用于生成根证书和基于该根证书的服务器证书。
在实际应用中,可能需要根据您的具体需求和环境进行更多的配置和调整。
特别是,您需要确保您的私钥得到妥善保管,不要将其泄露给未经授权的人员。

配置nginx

vim /nginx/conf/nginx.conf
#在http标签中添加https模块

server {
    listen       443 ssl;
    server_name  100.70.84.6 feng.com www.feng.com;

    ssl_certificate      /nginx/ssl/server_certificate.pem;
    ssl_certificate_key  /nginx/ssl/server_private_key.pem;

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

    ssl_protocols tlsv1.2 tlsv1.3;
    
    ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:high:!anull:!md5:!rc4:!dhe;
    ssl_prefer_server_ciphers on;

    location / {
        #proxy_pass http://100.70.84.6:20157;
        root   html;
        index  index.html index.htm;
    }
}

完整配置如下:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    #gzip  on;
	# http server
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }


    # https server
    server {
        listen       443 ssl;
        server_name  100.70.84.6 feng.com www.feng.com;
		#生成的ssl证书
        ssl_certificate      /nginx/ssl/server_certificate.pem;
        #证书秘钥
        ssl_certificate_key  /nginx/ssl/server_private_key.pem;

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

		ssl_protocols tlsv1.2 tlsv1.3;
        
        ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:high:!anull:!md5:!rc4:!dhe;
        ssl_prefer_server_ciphers on;

        location / {
            #proxy_pass http://100.70.84.6:20157;
			root   html;
            index  index.html index.htm;
        }
    }
}
重载nginx
/nginx/sbin/nginx -s reload
常用nginx命令
启动
/nginx/sbin/nginx
重载配置
/nginx/sbin/nginx -s reload
停止nginx
/nginx/sbin/nginx -s stop

本地安装证书

由于自签证书不是可信任的ca机构签发, 所以需要手动安装
*注意安装的是根证书root_certificate.pem , 不是服务器使用的server_certificate.pem
正式生产环境可以在阿里云或腾讯云免费申请证书使用
生产nginx配置https也是一样的,跳过openssl生成自签证书即可

点击不安全标签
点击证书无效

查看证书信息,这里的颁发者就是我们上面生成的 root_certificate.pem 根证书

ca

从服务器下载根证书进行安装.
注意不是服务器的证书, 因为服务器证书中不包含根证书信息
所以就算导出证书安装后也是一样无法正常使用
将root_certificate.pem转换为windows可以识别的crt文件
cd /nginx/ssl
cp root_certificate.pem 100.70.84.6.crt
将证书保存本地
保存后win+r打开窗口输入certlm.msc

在这里插入图片描述
点击受信任的根证书颁发机构–>证书
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择从服务器下载的证书文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

导入成功后, 关闭浏览器再重新访问服务器
可以看到https访问已经没问题了

在这里插入图片描述

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

HTTPS 证书自动续签工具

08-06

5分钟完成购买域名、服务器、安装nginx、申请SSL证书、部署SSL证书、实现HTTPS安全访问

08-06

IIS安全指南:解决HTTP访问正常而HTTPS失败的解决方案

08-06

详解网站提示err ssl protocol error

08-06

华为ssl vpn配置案例

08-06

参数理解 openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj “/CN=admission_ca“

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论