方式一:openssl
通过openssl 安装ssl证书搭建https:
下载 OpenSSL
配置环境变量
- 安装之后配置环境变量: 添加新的系统变量 OPENSSL_HOME :OpenSSL安装目录。然后在Path变量末尾加:%OPENSSL_HOME%\bin;
检查验证
检查 OpenSSL 版本:
如上表示安装成功。
创建私钥(RSA
)
openssl genpkey -algorithm RSA -out /path:/name-private.key -pkeyopt rsa_keygen_bits:2048
这个命令使用了genpkey
工具,这是OpenSSL的新一代密钥生成工具,提供更多配置选项。具体细节如下:
genpkey
:这是一个通用的密钥生成工具,支持多种算法和选项。-algorithm RSA
:指定生成RSA密钥。-out private.key
:输出密钥文件的文件名。/path:/为自己的保存路径。
-pkeyopt rsa_keygen_bits:2048
:指定密钥的位数,这里是2048位。
生成私钥后,接下来你可以根据需要生成证书签名请求(CSR),然后生成自签名证书或与证书颁发机构(CA)交互以获取正式证书。
生成签名(CSR)
生成CSR时需要提供一些证书信息,如国家(C)、省份(ST)、城市(L)、组织(O)、组织单位(OU)和通用名称(CN)。
最重要的是Common Name表示要使用https访问的域名。
openssl req -new -key name-private.key -out
/path:/
name-mycsr.csr
需要记住输入的密码 name为自定义的名字
生成证书
如果你只需要一个自签名证书用于开发或测试用途,你可以使用以下命令生成一个自签名证书。这里我们假设你希望生成一个有效期为一年的证书。/path:/为自己的保存路径。
openssl req -x509 -key name-private.key -in name-mycsr.csr -out
/path:/
name-mycert.crt -days 365
在使用OpenSSL生成自签名证书时,你可能会遇到以下警告:
这些警告通常不会影响基本功能,可以忽略。但了解它们的含义和如何处理它们可能对你有帮助:
1. Warning: Not placing -key in cert or request since request is used
这个警告是因为在创建证书时,OpenSSL注意到你指定了一个存在的CSR文件。它的意思是,证书中不会包含私钥的引用,因为你提供了一个CSR文件来生成证书。
通常情况下,你会使用以下命令生成自签名证书:/path:/为自己的保存路径。
openssl req -x509 -key name-private.key -in name-mycsr.csr -out /path:/name-mycert.crt -days 365
这个警告可以忽略,因为它不影响生成的自签名证书的实际使用。
2. Warning: No -copy_extensions given; ignoring any extensions in the request
这个警告是因为你生成的CSR可能包含了一些扩展字段(如Subject Alternative Name,SAN),但是在生成证书时,你没有指定要复制这些扩展字段。
要解决这个问题,可以在命令中使用-copy_extensions
选项。首先,你需要一个OpenSSL配置文件(例如openssl.cnf
),然后在生成证书时指定该文件并使用-copy_extensions
选项。
示例:使用OpenSSL配置文件
创建一个自定义的OpenSSL配置文件(openssl.cnf
):
[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = California
localityName = Locality Name (eg, city)
localityName_default = San Francisco
organizationName = Organization Name (eg, company)
organizationName_default = My Company
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = example.com
DNS.2 = www.example.com
然后,在生成CSR时使用这个配置文件:
openssl req -new -key private.key -out /path:/mycsr.csr -config openssl.cnf
最后,在生成自签名证书时,使用-copy_extensions
选项:
openssl x509 -req -days 365 -in mycsr.csr -signkey private.key -out /path:/mycert.crt -extensions req_ext -extfile openssl.cnf -copy_extensions copy
这个命令会确保CSR中的所有扩展字段(如Subject Alternative Name)被复制到生成的证书中。
查看证书
你可以查看生成的私钥:
openssl rsa -in name-private.key -check
可以查看生成的CSR:
openssl req -in name-mycsr.csr -text -noout
可以查看生成的证书:
openssl x509 -in name-mycert.crt -text -noou
删除 私钥、证书:
使用命令提示符:
- 打开命令提示符(CMD)。
- 使用
del
命令删除文件,例如:
del private.key
del mycsr.csr
del mycert.crt
使用证书
修改nginx的配置文件:
在Nginx中,你可以这样配置:
server {
listen 443 ssl;
ssl_certificate /path/to/myname.crt;
ssl_certificate_key /path/to/myname.key;
# 其他配置
}
server {
listen 443 ssl;
server_name axxx.com;
ssl_certificate D:/nginx/nginx-1.22.1/ssl/myname.crt;
ssl_certificate_key D:/nginx/nginx-1.22.1/ssl/myname.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8001; # 代理到第一个Spring Boot应用
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 443 ssl;
server_name bxx.com;
ssl_certificate D:/nginx/nginx-1.22.1/ssl/myname.crt;
ssl_certificate_key D:/nginx/nginx-1.22.1/ssl/myname.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8002; # 代理到第一个Spring Boot应用
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
同时配置好你的hosts文件
最终效果:
如果发现配置没有生效,请检查是否配置正确,以及使用了翻墙代理导致的问题。代理过滤调自己的自定义域名即可。