1、安装openSSL

weget http://www.openssl.org/source/openssl-1.0.0a.tar.gz
Tar -zxvf openssl-1.0.0a.tar.gz

(1)进入openssl-1.0.0a目录通过编译方式安装openssl

./config -prefix=/www/server/openssl#设置openssl安装路径

2、生成自签证书(CA)

(推荐在nginx下创建ssl目录)

(1)生成私钥
openssl genpkey -algorithm RSA -out root_private_key.pem -pkeyopt rsa_keygen_bits:4096

(注*  

centos8 秘钥长度低于2048位会报错)

(2)建立证书crs和自签证书
# 创建根证书的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"

(注*

My Root CA应替换为自签证书绑定的IP或域名,国家和地区自拟定)

(3)设置openssl服务内容
openssl x509 -req -days 3650 -in root_csr.pem -signkey root_private_key.pem -out root_certificate.pem -extensions v3_ca

(注*

x509: 这是用于处理 X.509 证书的子命令。

-days 3650: 指定证书的有效期,这里是 3650 天,相当于 10 年。

-in root_csr.pem: 指定输入文件,这里是证书签名请求文件,文件名为 root_csr.pem。

-signkey root_private_key.pem: 指定用于签名的私钥文件,这里是 root_private_key.pem,这个私钥应该与 CSR 相匹配。

-out root_certificate.pem: 指定输出文件,这里是生成的根证书文件,文件名为 root_certificate.pem。

-extensions v3_ca: 指定证书的扩展)

[v3_ca范例]

[v3_ca]
 basicConstraints = CA:TRUE 
keyUsage = keyCertSign, cRLSign

(注*

basicConstraints = CA:TRUE: 这是一个基本约束扩展,CA:TRUE 表示这个证书是一个 CA 证书,也就是说它可以用于签署其他证书。basicConstraints 是一个非常重要的扩展,它告诉验证者这个证书是否可以作为 CA 使用。

keyUsage = keyCertSign, cRLSign: 这是密钥用途扩展,它定义了证书持有者的公钥可以执行哪些操作。这里指定了两个用途:

keyCertSign: 表示公钥可以用于签署证书。

cRLSign: 表示公钥可以用于签署证书吊销列表(Certificate Revocation List,简称 CRL)。CRL 是一种用于列出被吊销的证书的列表,以确保这些证书不再被信任。)

(4)建立服务器私钥
openssl genpkey -algorithm RSA -out server_private_key.pem -pkeyopt rsa_keygen_bits:2048
(5)建立服务器证书的 crs
openssl req -new -key server_private_key.pem -out server_csr.pem -subj "/C=US/ST=California/L=San Francisco/O=My Company/CN=你的IP或域名"

(注*

CN=应替换为自签证书绑定的IP或域名,国家、地区和公司自拟定)

(6)在ssl目录下新建 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

(注*

*.feng.com为泛域名

IP.1需填写你的nginx服务器地址)

(7)保存生成的服务器证书
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

(注*

x509: 用于处理 X.509 证书的子命令。

-req: 表示输入文件是一个证书签名请求(CSR,Certificate Signing Request)。

-in server_csr.pem: 指定输入文件,这里是服务器的证书签名请求文件,文件名为 server_csr.pem。

-CA root_certificate.pem: 指定用于签名的 CA(证书颁发机构)证书,这里是 root_certificate.pem。这表明服务器证书将由这个根证书颁发。

-CAkey root_private_key.pem: 指定 CA 的私钥文件,这里是 root_private_key.pem。这个私钥用于签署服务器证书。

-CAcreateserial: 这个选项指示 OpenSSL 创建一个新的序列号文件,通常用于记录已颁发的证书的序列号。这有助于管理证书的吊销和验证。

-out server_certificate.pem: 指定输出文件,这里是生成的服务器证书文件,文件名为 server_certificate.pem。

-days 3650: 指定证书的有效期,这里是 3650 天,相当于 10 年。

-extensions v3_req: 指定证书扩展的名称,这里使用 v3_req。这通常在配置文件中定义,用于设置证书的扩展属性,如密钥用途、基本约束等。

-extfile openssl.cnf: 指定配置文件,这里是 openssl.cnf。这个文件包含了证书扩展和其他证书属性的详细配置。)

(8)验证证书
# 验证根证书  
openssl x509 -in root_certificate.pem -text -noout  
# 验证服务器证书  
openssl x509 -in server_certificate.pem -text -noout
2、Nginx服务配置实例

2、Nginx服务配置实例

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;
        }
    }
}

PS  如果出现pod2man错误,删除即可

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




本文为Ke_Xin_JSY 编写 转发请标注