跳到主要内容

配置 SSL 证书

一、Nginx

# 443 端口
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name domain;
#证书文件名称
ssl_certificate /etc/nginx/ssl/domain_bundle.crt;
#私钥文件名称
ssl_certificate_key /etc/nginx/ssl/domain.key;
# 设置 SSL 会话缓存。存储 SSL 会话参数,以便在同一客户端的后续连接中重用,从而减少 SSL 握手的开销
# shared:SSL:1m 表示创建一个名为 "SSL" 的共享内存区,大小为 1MB。这个内存区可以被所有工作进程(worker process)共享,用于存储 SSL 会话参数。
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
charset utf-8;
default_type text/plain;

root /etc/nginx/html;

location / {
root html;
index index.html index.htm;
}
location /ctx {
proxy_pass http://localhost:8080/ctx;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

二、Tomcat

  1. jks 证书复制到 ${TOMCAT_HOME}/conf/
  2. 修改 ${TOMCAT_HOME}/conf/server.xml
	<!-- https 访问端口, keystoreFile 指定 jks 文件的地址,keystorePass 指定 jks 的密码 -->
<Connector port="443" protocol="HTTP/1.1"
connectionTimeout="20000"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="D:/TOMCAT/apache-tomcat-9.0.68/conf/(20230713131002)tomcat.jks"
keystorePass="Abc_123"
clientAuth="false"
/>
<!--http 访问端口 , 将 http 端口的请求转发到 https 端口-->
<Connector port="9999" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
  1. 修改 ${TOMCAT_HOME}/conf/web.xml
<!--在 web.xml 末尾加上-->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
  1. 重启 Tomcat

三、WebLogic

WebLogic 服务器 SSL 证书安装部署

四、troubleshooting

1、crtjks 的方法

wosigncode.exe 下载连接

CAFA SSL 证书工具

2、查看 jks 的别名

查看 jks 的别名。在 cmd 中执行下面的命令(需要在 keystore.js 所在文件下打开命令行)

keytool -v -list -keystore keystore.jks

acme.sh 签署证书

https://cloud.tencent.com/developer/article/2335528

安装

curl https://get.acme.sh | sh -s email=wangzhy@linux.do

配置 tencent api 访问密钥

API 密钥管理地址:https://console.cloud.tencent.com/cam/capi

配置环境变量

export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

签发证书

acme.sh --issue --dns dns_tencent -d example.com -d *.example.com --force

签发之后的证书放在:~/.acme.sh/example.com_ecc 文件夹下面

Nginx 配置

配置 ssl_certificatessl_certificate_key 即可。

#证书文件名称
ssl_certificate /etc/nginx/ssl/fullchain.cer;
#私钥文件名称
ssl_certificate_key /etc/nginx/ssl/example.com.key;

完整配置如下:

server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name blog.wangzhy.com;
#证书文件名称
ssl_certificate /etc/nginx/ssl/fullchain.cer;
#私钥文件名称
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

root /etc/nginx/html/blog;
index readme.html index.html index.htm index.php;

absolute_redirect off; # 在某些情况下,保持原始 URL 可能对搜索引擎优化有利。
location / {
try_files $uri $uri/index.html $uri/ /index.html;
}

# 缓存静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
add_header Cache-Control public;
}

error_page 400 402 403 404 500 502 503 504 /50x.html;
location = /50x.html {
}
}

自签证书

1. 生成 RSA 私钥

openssl genrsa -out private.key 2048

2. 生成证书签名请求 csr 文件

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

3. 自签证书

openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt

4. Nginx 配置

server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
...
}