名词
der:证书编码格式。
pem:证书编码格式,对der二进制编码的base64字符,包含—begin—,---end—。
.csr:证书请求文件格式,包含公钥和主体信息,发给CA,CA会使用私钥加密后对内容签名并制作成证书后返回。
.crt:一般用于linux系统的证书格式,包含公钥和主体信息。
.cer:一般用于windows系统的证书格式,包含公钥和主体信息。
.p12:证书交换格式,包含公钥私钥,用于交换传输。
生成证书
keytool是jdk自带的密钥和证书管理工具,使用keytool生成证书的具体步骤如下:
- 生成keystore
keytool -genkey -alias my_certificate -keyalg RSA -keysize 2048 -dname “CN=localhost,O=baidu,C=CN” -validity 3650 -keystore test.keystore
其中:
alias:指定的是证书的别名。
validity:指定证书的有效时间,以天为单位。
dname:指定证书的拥有者信息,一般服务器端的证书需要包含域名、IP主机名或服务名称等信息。客户杜端证书包含主机名、IP地址、服务名称或用户名称等信息。
CN:域名、IP或服务名称
O:组织名称
C:单位的两字母国家代码
keystore:指定生成的证书。 - 生成证书的.csr文件
keytool -certreq -alias my_certificate -file test.cert -keystore test.keystore - 申请签发证书
将步骤2中生成的csr文件发送给签发机构,证书签发完成后会从签发机构拿到根证书和根据自己的证书信息生成的已签名证书。假设签发机构的根证书为GlobalSign_Root_CA.cer,自己的已签名证书为test.pem,需要将这两个证书都导入证书库中。 - 导入已签名证书
keytool -import -file test.pem -alias test_cert -keystore test.keystore - 导入根证书
keytool -import -alias Root_CA_cer -v -trustcacerts -file Desktop/GlobalSign_Root_CA.cer -keystore test.keystore - 查看证书信息
keytool -list -v -keystore test.keystore
配置server.xml
打开tomcat的server.xml,配置keystoreFile=“test.keystore的存放地址”,keystorePass=“test.keystore的证书密码”。
配置web.xml
如果想强制只使用https,可以在web.xml中配置以下信息:
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPS</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constrain>
补充
1.如果只是自己在本地开启https,也可以不执行生成证书中步骤三以后的步骤,但是在通过浏览器访问时,会提醒你访问的地址不安全,是否要继续访问,点击继续后,不会影响你服务正常使用。显示地址不安全的大致原因就是你使用的证书没有签发机构或者是签发机构不在浏览器可信证书的列表中,导致在https连接建立的过程中,浏览器无法验证你的身份。
2.如果公司有相应的安全规范要求,一般都不能直接在配置文件中配置明文密码,如keystorePass的配置就需要将明文加密后配置。
参考
名词解释参考:java 证书工具keytool生成自签名证书和自签CA证书
后记
该文章为自己研究https生成证书涉及到的相关步骤,想通过自己的方式记录方便后续查找。若有描述有误之处,还请读者见谅;欢迎广大读者指出文章不足或描述有误之处。