1. 证书格式
HTTPS 使用了PKI技术,其主要作用是绑定证书持有者信息和相关的密钥对,其中 HTTPS 证书的格式采用了X.509。
用户的证书,公私钥对一般分为两种方式保存:
- 公钥和证书放在一个文件中,私钥单独存放在一个文件中
- 公钥、证书和私钥共同放在一个文件中
网上生成证书的教程,涉及许多证书格式,这里列举几种最常见的证书格式以作说明。
后缀 | 说明 | 特点 |
---|---|---|
p12 | PCKS#12标准证书 | 包含证书和公钥,和使用了密码保护的私钥 |
pem | PEM BASED64位编码的 DER 文件 | 包含证书和公钥,可包含私钥 |
cer crt der | DER 二进制编码的X.509证书 | 包含证书和公钥 |
key | BASED64位编码的私钥文件 | 包含证书和公钥 |
jks | Java的keytools证书工具支持的证书私钥格式 | 包含私钥 |
csr | X.509证书请求文件。CA签名后生成crt证书 | X.509证书请求文件。CA签名后生成crt证书 |
2. 制作证书
本文使用openssl制作证书,在一个单独的目录中,进行以下操作
2.1 制作根证书
# 1.制作证书私钥
$ openssl genrsa -out root-key.key 1024
# 2.创建根证书请求文件,需要填写一些身份信息
$ openssl req -new -out root-req.csr -key root-key.key
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn //国家
State or Province Name (full name) []:beijing //地区,本行和下一行一致
Locality Name (eg, city) [Default City]:beijing //地区
Organization Name (eg, company) [Default Company Ltd]:nr //公司,本行和下一行一致
Organizational Unit Name (eg, section) []:nr //公司
Common Name (eg, your name or your server hostname) []:root //服务器名
Email Address []: //不用填,直接回车
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: //不用填,直接回车
An optional company name []: //不用填,直接回车
# 3.自签根证书
$ openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root-key.key -CAcreateserial -days 3650
# 4.生成p12格式根证书,密码123456
openssl pkcs12 -export -clcerts -in root-cert.cer -inkey root-key.key -out root.p12
2.2 制作服务端证书
# 1.生成服务端key
$ openssl genrsa -out server-key.key 1024
# 2.生成服务端请求文件
$ openssl req -new -out server-req.csr -key server-key.key
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn //国家
State or Province Name (full name) []:beijing //地区,本行和下一行一致
Locality Name (eg, city) [Default City]:beijing //地区
Organization Name (eg, company) [Default Company Ltd]:nr //公司,本行和下一行一致
Organizational Unit Name (eg, section) []:nr //公司
Common Name (eg, your name or your server hostname) []:server //服务器名
Email Address []: //不用填,直接回车
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: //不用填,直接回车
An optional company name []: //不用填,直接回车
# 3.生成服务端证书
$ openssl x509 -req -in server-req.csr -out server-cert.cer -signkey server-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days 3650
# 4.生成p12格式服务端证书,密码123456
$ openssl pkcs12 -export -clcerts -in server-cert.cer -inkey server-key.key -out server.p12
2.3 制作客户端证书
# 1.生成客户端key
$ openssl genrsa -out client-key.key 1024
# 2.生成客户端请求文件
$ openssl req -new -out client-req.csr -key client-key.key
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn //国家
State or Province Name (full name) []:beijing //地区,本行和下一行一致
Locality Name (eg, city) [Default City]:beijing //地区
Organization Name (eg, company) [Default Company Ltd]:nr //公司,本行和下一行一致
Organizational Unit Name (eg, section) []:nr //公司
Common Name (eg, your name or your client hostname) []:client //服务器名
Email Address []: //不用填,直接回车
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: //不用填,直接回车
An optional company name []: //不用填,直接回车
# 3.生成客户端证书
$ openssl x509 -req -in client-req.csr -out client-cert.cer -signkey client-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days 3650
# 4.生成p12格式客户端证书,密码123456
$ openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12
2.4 制作服务端信任库
# 制作信任库
$ keytool -keystore truststore.jks -keypass 123456 -storepass 123456 -alias ca -import -trustcacerts -file root-cert.cer
2.5 文件列表
# 当前目录下所有文件
$ ls
root-key.key // 根证书 key
root-req.csr // 根证书请求文件
root-cert.cer // 根证书,只包含公钥
root.p12 // 根证书,包含公钥和私钥,私钥用密码进行了保护
root-cert.srl
server-key.key // 服务端证书 key
server-req.csr // 服务端证书请求文件
server-cert.cer // 服务端证书,只包含公钥
server.p12 // 服务端证书,包含公钥和私钥,私钥用密码进行了保护
client-key.key // 客户端证书 key
client-req.csr // 客户端证书请求文件
client-cert.cer // 服务端证书,只包含公钥
client.p12 // 服务端证书,包含公钥和私钥,私钥用密码进行了保护
truststore.jks // 服务端信任库
3. 单向认证
3.1 Tomcat 单向认证
- 生成相关证书
需要 server.p12 ,详见第二章。 修改配置文件
修改tomcat /conf/server.xml文件,在 Server->Service 标签内加入如下 Connector 配置<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https"
secure="true" sslProtocol="TLS"
keystoreFile="server.p12" keystorePass="123456" />
</Service>
</Server>
-
3.2 Nginx 单项认证
生成相关证书
需要 server-key.key 和 server-cert.cer ,详见第二章。修改配置文件
修改 /etc/nginx/conf.d/default.conf 配置文件,修改或添加下面内容server {
listen 443 ssl; # 在 443 端口开启https
ssl_certificate server-cert.cer; # 服务端证书,只包含公钥
ssl_certificate_key server-key.key; # 服务端私钥
}
验证
访问 https://localhost3.3 WebLogic 单项认证
weblogic配置https使用可视化方式,具体操作见下方博客。
https://blog.csdn.net/u013310119/article/details/801825484. 双向认证
4.1 Tomcat 双向认证
生成相关证书
需要 server.p12 、truststore.jks 和 client.p12 ,详见第二章。修改配置文件
修改tomcat /conf/server.xml文件,在 Server->Service 标签内加入如下 Connector 配置<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https"
secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="server.p12" keystorePass="123456"
truststoreFile="truststore.jks" truststorePass="123456"/>
</Service>
</Server>
-
4.2 Nginx 双向认证
生成相关证书
需要 server-key.key 、server-cert.cer 、 root-cert.cer 和 client.p12 ,详见第二章。修改配置文件
修改 /etc/nginx/conf.d/default.conf 配置文件,修改或添加下面内容 ```yaml server { listen 443 ssl; # 在 443 端口开启https ssl_certificate server-cert.cer; # 服务端证书,只包含公钥 ssl_certificate_key server-key.key; # 服务端私钥ssl_verify_client on; # 开启客户端证书验证 ssl_client_certificate root-cert.cer; # 根证书
} ```
- 验证
访问 https://localhost4.3 WebLogic 双向认证
weblogic配置https使用可视化方式,具体操作见下方博客。
https://blog.csdn.net/u013310119/article/details/80182548