IP地址也能申请ssl证书啦!想开启https访问?先部署ssl证书再说!
Kimjie, 江湖人也称金杰。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构、大数据与自动化运维,曾负责国内某大型电商运维工作。
问题:昨天使用Cloudflare做域名解析时,访问Cloudflare公共DNS服务的官网,发现网站竟然是https://1.0.0.1!
恕我孤陋寡闻,这是生平第一次见到以https方式访问公网IP。用多款浏览器测试,均认为这是一个合法的请求地址。查看证书,是由DigiCert签发的合法证书:
可以明确以下事实:
1.0.0.1
肯定是一个IP;.1
不是顶级域名后缀(TLD);1.0.0.1
不是域名/主机名(FQDN);平时极少以https访问IP。
总结起来一句话:能给IP颁发合法SSL证书?
解答
在superuser网站上,有类似的疑惑:Why does my browser think that https://1.0.0.1 is secure?。根据网友答案,可以给公网IP颁发证书,但罕见。
确认可以为IP签发证书,继续查资料,找到如下信息:
IP只能签发OV证书;要验证企业名称合法性,以及根据whois信息验证对IP的所有权。
个人不能为IP申请证书;如果没有IP所有权,企业或机构从云厂商获取到的IP也不能申请证书,因为有使用权但没有所有权。域名比IP(相对)更容易获取,并且一个域名可以对应多个IP,故而极少有为IP申请证书的情况。
测试
弄清楚其中道理,接下来验证一下与理论是否相符。
先请出免费获取证书的Lets Encrypt
的certbot
工具,尝试为IP颁发证书,输出如下:
[root@xxxx~]certbot certonly--standalone-d xxx.xxx.xxx.xxxRequestedname xxx.xxx.xxx.xxxisan IP address.TheLets Encrypt certificate authority will not issue certificates for a bare IP address.
结论:Lets Encrypt
不能为IP签发证书!
然后我又在网上搜了一下,确实有一些为IP签发ssl证书的,比如到www.ipssl.com.cn这个网站上就能申请到。
目前有很多针对域名的流量劫持等攻击,使用IP地址并配置IP SSL证书能有效避免这类攻击。
那么申请到ip或域名的ssl证书之后,我们如何配置到服务器上呢?下面贴出nginx配置ssl证书开启https供大家参考:
nginx.conf中配置
server{listen443;server_nameexample.com;root/usr/share/nginx/www;indexindex.htmlindex.htm;sslon;ssl_certificate/etc/nginx/ssl/server.crt;ssl_certificate_key/etc/nginx/ssl/server.key;}
如果想把 http 的请求转到 https 的话:
server{listen80;server_nameexample.me;rewrite^https://$server_name$request_uri?permanent;}
觉得不错,点个在看然后转发出去