生成证书
准备linux服务器 这里准备的是 rocky9.4
安装openssl工具
dnf install -y openssl
开始生成自签证书
创建目录 mkdir ssl
进入目录 cd ssl
一、生成根证书的私钥和证书
1,生成CA根证书私钥
openssl genrsa -out ca.key 2048
2,使用私钥生成CA根证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt
操作过程中需要依次输入国家(如CN)、省份(如SHANGHAI)、城市(如SHANGHAI)、组织名称、组织代码、自签的证书IP或域名(如192.168.140.120)、邮箱等信息。
大概会有如下信息
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:LIAONING
Locality Name (eg, city) [Default City]:DALIAN
Organization Name (eg, company) [Default Company Ltd]:zhaoq.top
Organizational Unit Name (eg, section) []:10101101001
Common Name (eg, your name or your server's hostname) []:10.10.10.1
Email Address []:admin@example.com
二、为内网IP(或域名)生成私钥和证书请求文件(CSR)
1,生成内外IP的私钥
openssl genrsa -out server.key 2048
2,使用私钥生成证书请求文件
openssl req -new -key server.key -out server.csr
这里填写的内容与生成CA根证书时一致(除了通用名称填写内网IP地址或域名),最后两行直接按回车即可。
三、创建证书扩展文件
1,创建一个名为v3.ext的文件,并添加以下内容:
[req]
# 其他请求配置...
[server_ext]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 10.10.10.1
四、使用CA的证书为内网IP(或域名)签名证书
1,使用命令:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
###注意到这里建议看下面代码框###
五、部署(Tomcat和Nginx)
1,Nginx部署
得到server.crt和server.key后,在nginx配置文件中添加以下内容:
server {
listen 443 ssl;
server_name localhost;
#ssl证书路径
ssl_certificate ../../server.crt;
#私钥文件路径
ssl_certificate_key ../../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;
}
}
2,Tomcat部署
A. 将证书导出成浏览器支持的.p12格式:
openssl pkcs12 -export -in server.crt -inkey server.pem -out server.p12
(需要输入一个密码)
B. 将.p12格式转换成jks证书:
keytool -importkeystore -srckeystore server.p12 -srcstoretype pkcs12 -destkeystore server.jks -deststoretype jks
(A步骤输入的密码和B步骤的要一致)
C. Tomcat 8部署,在配置文件中添加以下内容:
<Connector port ="8443" protocol ="org.apache.coyote.http11.Http11NioProtocol" maxThreads ="150" SSLEnabled ="true" >
<SSLHostConfig >
<Certificate certificateKeystoreFile ="jks证书地址" certificateKeystorePassword ="上述输入的密码" type ="RSA" />
</SSLHostConfig >
</Connector >
六 客户端配置(可选)
客户端访问https的时候,如果想浏览器不带警告,需要将根证书即:ca.crt安装到本地的受信任目录中。
Windows(大多数人使用):
双击ca.crt文件,点击安装证书,选择本地计算机,点击下一步,选择将所有证书都放入下列存储,点击浏览,选择受信任的根证书颁发机构,点击确定,点击完成。
Centos:
sudo cp ca.crt /etc/pki/ca-trust/source/anchors/`和`sudo update-ca-trust
Ubuntu:
sudo cp ca.crt /usr/local/share/ca-certificates/`和`sudo update-ca-certificates
生成证书整理版
第一步:创建证书扩展文件 keycloak.ext
这部分定义了证书的用途和绑定的域名。复制下面的完整代码块,粘贴到命令行,然后按回车。
Shell
cat > keycloak.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=keycloak.easyops.online
EOF
第二步:生成 CA(证书颁发机构)私钥和根证书
这两条命令会创建一个自签名的 CA,后续将用它来签发服务器证书。
Shell
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 36500 -subj "/C=CN/ST=JS/L=NJ/O=easyops/OU=easyopslocal/CN=keycloak.easyops.online" -key ca.key -out ca.crt
第三步:生成 Keycloak 服务器的私钥和证书签名请求 (CSR)
这两条命令会创建服务器专用的密钥和请求文件。
Shell
openssl genrsa -out server.key 4096
openssl req -sha512 -new -subj "/C=CN/ST=NJ/L=NJ/O=easyops/OU=easyopslocal/CN=keycloak.easyops.online" -key server.key -out server.csr
第四步:使用 CA 签署服务器证书
这是最后一步,使用之前生成的 CA 根证书和私钥来签发服务器证书。
Shell
openssl x509 -req -sha512 -days 36500 -extfile keycloak.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
执行完以上所有命令后,你会在当前目录下得到以下几个文件:
ca.key:CA 私钥
ca.crt****:CA 根证书
server.key:服务器私钥
server.csr:服务器证书签名请求
server.crt****:服务器证书
keycloak.ext:证书扩展配置文件
ca.srl:CA 证书序列号文件