专栏首页MyPanda的学习笔记数字证书系列--将证书绑定到多个URL以及IP

数字证书系列--将证书绑定到多个URL以及IP

在我们个人搭建网站的时候,很可能开始的时候还没有注册DNS, 这时候就可能需要把 证书绑定到对应的IP地址上,从而实现验证,下面简述如何实现证书绑定到IP地址上:

首先创建CA证书的私钥,用rsa加密,2048bit.

[root@localhost new_ca]# openssl genrsa -out CA_Key.key  2048
Generating RSA private key, 2048 bit long modulus
....................+++
..+++
e is 65537 (0x10001)
[root@localhost new_ca]# ls
CA_Key.key

利用CA_Key.key 创建CA证书. 生成的证书为CA_Cert.pem.

[root@localhost new_ca]# openssl req -new -x509 -key CA_Key.key  -out CA_Cert.pem                                                      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) []:GuangDong
Locality Name (eg, city) [Default City]:ShenZhen
Organization Name (eg, company) [Default Company Ltd]:Alone
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[root@localhost new_ca]#

生成服务器证书的私钥server.key.

[root@localhost new_ca]# openssl genrsa -out server.key  2048
Generating RSA private key, 2048 bit long modulus
...+++
..+++
e is 65537 (0x10001)
[root@localhost new_ca]#

生成服务器的证书请求文件server.csr。 这里需要注意的是:提供的Country Name, State or Province Name, Organization Name 必须要要和CA证书中相关信息一致,否则在签名的时候会报错,而在生成csr的时候并不会报错;在这里的演示中,不采用交互模式,而是通过 -subj 参数来进行传递,另外,可以指定多次CN,从而实现对多个地址的绑定, 包括IP地址以及URL等;这里用两个IP地址,两个URL作为例子

#这里是一个Organization不匹配,导致用CA签名时候报错的例子;
[root@localhost new_ca]#  openssl ca -in ./server.csr  -out ./my.crt -days 365 -cert ./CA_Cert.pem  -keyfile ./CA_Key.key  #这个命令是用来签名的
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
The organizationName field needed to be the same in the
CA certificate (Alone) and the request (Alne)

#生成正确的csr 文件, CN (COMMON NAME)就是证书会被绑定的地址,这里使用IP,而不是URL;
[root@localhost new_ca]# openssl req -new -key server.key -subj "/C=CN/ST=GuangDong/O=Alone/CN=127.0.0.1/CN=192.168.0.110/CN=www.my.com/CN=www.alone.com" -out server.csr
[root@localhost new_ca]#

利用CA证书对上面生成的server.csr 进行签名;在这个签名的过程中,关键是要设置subjectAltName的值,该值的设置可以通过扩展文件来实现,从而无需更改openssl的配置文件,方法如下:

#创建文件extfile.cnf, 内容如下,其要和前面的csr文件中对应的CN(common name)信息相互一致:
[root@localhost new_ca]# cat extfile.cnf
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.my.com
DNS.2 = www.alone.com
IP.1 = 192.168.0.110
IP.2 = 127.0.0.1
[root@localhost new_ca]#
[root@localhost new_ca]#  openssl x509 -req -in server.csr -CA CA_Cert.pem -CAkey CA_Key.key -CAcreateserial  -extfile extfile.cnf -out server.crt
Signature ok
subject=/C=CN/ST=GuangDong/O=Alone/CN=127.0.0.1/CN=192.168.0.110/CN=www.my.com/CN=www.alone.com
Getting CA Private Key
[root@localhost new_ca]# 
[root@localhost new_ca]# ls
CA_Cert.pem  CA_Cert.srl  CA_Key.key  extfile.cnf  server.crt  server.csr  server.key
[root@localhost new_ca]#

利用openssl查看证书的内容, 在如下的subject中可以看到包含了上述的4个CN.

[root@localhost new_ca]# openssl x509 -in ./server.crt  -subject
subject= /C=CN/ST=GuangDong/O=Alone/CN=127.0.0.1/CN=192.168.0.110/CN=www.my.com/CN=www.alone.com       
-----BEGIN CERTIFICATE-----
MIIDkzCCAnugAwIBAgIJANy5Ydsd+Ud5MA0GCSqGSIb3DQEBCwUAMFExCzAJBgNV
BAYTAkNOMRIwEAYDVQQIDAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMQ4w
DAYDVQQKDAVBbG9uZTELMAkGA1UECwwCSVQwHhcNMTkxMDA2MTAyOTA1WhcNMTkx
MTA1MTAyOTA1WjCBijELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUd1YW5nRG9uZzEO
MAwGA1UECgwFQWxvbmUxEjAQBgNVBAMMCTEyNy4wLjAuMTEWMBQGA1UEAwwNMTky
LjE2OC4wLjExMDETMBEGA1UEAwwKd3d3Lm15LmNvbTEWMBQGA1UEAwwNd3d3LmFs
b25lLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPQcGlkT+SX9
+jt5FUjx2I4ztCpDthl4hBu3es4uqHzVZaNyUb/BcESv5s7ESxIQTr9DON1nV2k/
d/MO0NAYgIQJ/4TsfA4fch/J0LuubKAIwarvOnVQLX3S3rvrhOr6ZUx5AcSi7qve
Vspx/EGqwKnwfzrq3xFPl2nJ8gTd+7ROoMe3e4g+ZUiVH1qI2tve41wCFOk49ppt
3S1dtOvM06+t+Y26tP2jc/9kSXoY44++VL9RHuJ/82zzm9huCUwcn+DB901j9AGh
+Xu1xCwXkH5D+ZXfaGvCroiahsCujxyzmYufJRGDFoRaPAM/PbcTR5tHcuy0nClI
Iyvxopb1xdkCAwEAAaM0MDIwMAYDVR0RBCkwJ4IKd3d3Lm15LmNvbYINd3d3LmFs
b25lLmNvbYcEwKgAbocEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAPiIPUsX8rEQ0
0Uz5jgY528leJ6Zlh1yiFfv2AExgWDDRU3d3tzrdZD4n2CTM5yV7VMjhyNTTZ3y5
5OrnkagaEFU6qmxH9RJz4I30hMAr/02LjgFAaQpMSeZYXpkyOAEQbGC1bmgIqF+C
4nH8zI9R/6wSfHTRdhTF7G5vR1iWtKywBj/UX6KgkTmJWbLeoSmoTvobSQ5FxuYR
bIdtXhZkMJmkOHsw/qv4sibvg2VDhWVPed/79/at+VNTE6NWgQ5n1TCih0XyS9XF
L24+wVtrU/eXmDKLbYkm6pJT5jGu9b5IuAo8/1KwV5iB3M2sCr7Ygq1HgAEhLRko
30VEHxVkgg==
-----END CERTIFICATE-----
[root@localhost new_ca]#

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 私有docker registry镜像的制作-busybox based

    我们通过hub.docker网站可以发现official的registry基于alphine base image, 其实我们也可以基于busybox imag...

    qsjs
  • 数字证书系列-CA以及用CA 签发用户证书

    我们如何由证书请求文件获得证书呢? 我们的证书请求文件一般发送给相应(取决于CSR文件创建向导中填写的X.509信息)的可信任“证书签发”机构,他们会给我们生成...

    qsjs
  • https通信过程的简单理解

    A. client 连接请求发送到server, server根据配置,发送自己相应的证书给客户端的应用程序(通常是浏览器),这时候的证书中含有的信息包括:证...

    qsjs
  • AI寒冬论作者再发文:「深」度学习对数据的理解太「浅」了

    计算机视觉和 AI 领域研究者 Filip Piekniewski 曾经发表「AI 寒冬将至」的观点,从大公司对 AI 研究的兴趣、深度学习的扩展能力、炒作等角...

    abs_zero
  • AI寒冬论作者再发文:「深」度学习对数据的理解太「浅」了

    计算机视觉和 AI 领域研究者 Filip Piekniewski 曾经发表「AI 寒冬将至」的观点,从大公司对 AI 研究的兴趣、深度学习的扩展能力、炒作等角...

    机器之心
  • 【每日一题】问题 1241: 盐水的故事(题目取自ACM训练)

    关注我们 题目描述 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一 下;再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升...

    编程范 源代码公司
  • MySQL创建用户与授权

    假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%',则在使用REVOK...

    柳公子
  • Android 快速解析xml

    相信我们Android开发和后台请求回来的数据大部分都是json格式 但是如果后台返回给我们的数据时xml格式的怎么办呢 没错你可以选择SAX解析、PULL...

    longzeqiu
  • MySQL 数据库锁定机制

    1. MySQL 锁定机制简介 各存储引擎使用三种类型锁定机制 行级锁定(row-level) 表级锁定(table-level) 页级锁定(page...

    wangxl
  • Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)

    基于ELK搭建的日志平台,前期匆忙建设过程中一些参数和设计未做过多的考虑,上线后就需要不断根据实际情况做调整,而一些调整限于ELK的一些特性,一旦操作不当就会出...

    高广超

扫码关注云+社区

领取腾讯云代金券