1、Keytool生成自签名证书
Keytool是一个Java数据证书的管理工具,安装JDK后自带。
1.1 生成证书server.jks
keytool -genkey -alias server -keyalg RSA -keysize 2048 -validity 3650 -keystore server.jks -storepass 123456 -storetype PKCS12
回车后第一个参数:“您的名字与姓氏是什么[CN]?”的值为最终https使用的服务器ip或域名,其他值根据实际情况填写。
其中:-alias为别名,-storepass为密码,-validity为证书有效时间,默认365天。
证书格式转换(jks->pfx)server.pfx
keytool -importkeystore -srckeystore server.jks -destkeystore server.pfx -srcstoretype JKS -deststoretype PKCS12
1.2 配置tomcat
复制server.jks到tomcat目录,如"tomcat/conf",编辑server.xml:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/server.jks" type="RSA" certificateKeystorePassword="123456"/>
</SSLHostConfig>
</Connector>
或者
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="conf/server.jks"
keystorePass="123456" clientAuth="false" sslProtocol="TLS">
</Connector>
1.3 配置nodejs
复制server.pfx到nodejs工程目录,编辑nodejs文件,
在头部引入https:
const https = require('https');
在文件最后添加以下内容:
const options = {
pfx: fs.readFileSync('./server.pfx'),
passphrase:'123456'
};
const server = https.createServer(options, app).listen(8443, function(err){
console.log("https listening on port: 8443");
});
1.4 配置SpringBoot
复制server.jks到SpringBoot工程resources目录,配置application.properties文件,增加以下内容:
server.ssl.key-alias=server
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:server.jks
2、Openssl生成自签名证书
2.1 生成证书
生成私钥server.key:
openssl genrsa -out server.key 2048
生成公钥server.csr:
openssl req -new -key server.key -out server.csr
回车按照提示输入,Common Name的值为最终https使用的服务器ip或域名,其他值根据实际情况填写。
生成自签证书(证书默认过期时间365天,此处设置为3650天)server.crt
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650
证书导出为server.p12:
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12
2.2 配置tomcat
复制server.key和server.crt到tomcat目录,如"tomcat/conf",编辑server.xml:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeyFile="conf/server.key" certificateFile="conf/server.crt"
type="RSA" />
</SSLHostConfig>
</Connector>
2.3 配置nodejs
复制server.key和server.crt到nodejs工程目录,编辑nodejs文件,
在头部引入https:
const https = require('https');
在文件最后添加以下内容:
const options = {
key: fs.readFileSync('./server.key'),
cert: fs.readFileSync('./server.crt')
};
const server = https.createServer(options, app).listen(8443, function(err){
console.log("https listening on port: 8443");
});
2.4 配置SpringBoot
复制server.p12到SpringBoot工程resources目录,配置application.properties文件,增加以下内容:
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:server.p12
3、Openssl生成自签名V3证书
3.1生成自签名CA证书
(1)生成私钥
openssl genrsa -out ca.key 2048
(2)生成根证书
根证书是整个信任链的起点,如果一个证书的每一级签发者向上一直到根证书都是可信的,那个就可以认为这个证书也是可信的。有了这个根证书,就可以用它来给其他实体签发实体证书了。注意CN的值,更改为实际值。
openssl req -x509 -new -nodes -days 3650 -subj "/CN=gv.k8s.service" -key ca.key -out ca.crt
3.2生成服务端证书
(1)生成私钥
openssl genrsa -out server.key 2048
(2)生成签名证书CSR
openssl req -new -subj "/CN=gv.k8s.service" -key server.key -out server.csr
(3) 生成一个x509 v3扩展文件
cat >v3.ext<<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=gv.k8s.service
EOF
(4)生成签名证书
openssl x509 -req -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
3.3创建k8s secret
kubectl create secret tls gv-ingress-secret --key server.key --cert server.crt -n gv-service