生成证书


准备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 证书序列号文件