用openssl生成的ssl证书和付费的有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用openssl生成的ssl证书和付费的有啥区别相关的知识,希望对你有一定的参考价值。

openssl生成的SSL证书也叫自签名SSL证书,签发很随意,任何人都可以签发,容易被黑客仿冒利用,不是由正规的CA机构颁发的,所以不受浏览器的信任。
而付费的SSL证书,是由受信任的CA机构颁发的,申请时会对域名所有权和企业相关信息进行验证,安全级别是比较高的,而且备受各大浏览器的信任。当然是付费的好。
参考技术A 本文记叙的是一次基于SSL的socket通讯程序开发中,有关证书,签名,身份验证相关的步骤。 我们的场景下,socket服务端是java语言编写的,客户端是c语言。使用了一个叫做matrixssl的c语言库。自己做CA签名,不等同于“自签名”。 自签名的情况,RSA的公钥私钥只有一对,用私钥对公钥证书做签名。而我们的场景是,自己做CA,有一个CA的公钥私钥对。 而socket的服务端也有一个公钥私钥对。 用CA的私钥对socket服务端的公钥证书做签名。
openssl genrsa -out ca.key 1024

(这里我们没有用des3加密。 可以增加一个-des3参数加密,详情可以man genrsa)
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt

(这一步的时候需要在提示之下输入许多信息,包括国家代码,省份,城市,公司机构名等)
生成server端的私钥key:
openssl genrsa -out server.key 1024

生成server端的req文件(这一步生成的req文件,包含公钥证书,外加身份信息,例如国家,省份,公司等。用它提交给ca,让ca来对它做签名 ):
openssl req -new -key server.key -out server.csr

用CA的私钥对server的req文件做签名,得到server的证书:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

(注:如果第一次使用openssl,报告一些相关的文件找不到之类的错误,可能需要先执行2个命令:touch /etc/pki/CA/index.txt 和 echo '01' > /etc/pki/CA/serial)
以上得到的server.crt就是服务端的证书文件。(有很多软件中需要各种不同证书存储格式,可能需要各种转换。 如PEM, P12等,我们的场景下也需要一点转换,下文会描述。刚开始做这些的同学可能会觉得证书,以及格式等非常的混乱。 这个时候能做的就是冷静下来,耐心的理清楚TLS, RSA等原理, 多看看openssl的man文档)
不知道把ca.crt叫做CA的证书文件是否妥当,但是可以确定的是,客户端使用ca.crt可以校验server的身份。server在SSL/TLS握手的过程中会下发自己的证书,而这个证书是经过CA签名的。CA签名的时候使用的是CA自己的私钥,而ca.crt则包含了CA的公钥,可以用于检验这一签名,以确认是否是自己签的名。
服务端需要使用的文件是:server私钥(key), server证书。
客户端需要使用的文件是:CA file(ca的证书,用以验证server下发的证书)
我们的server端使用java, 使用p12(PKCS12)格式的证书。使用openssl可以进行格式转换:
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12
可以看到输出的server.p12中应该包含了server.key和server.crt的内容。
我们的c语言客户端直接使用CA文件: ca.crt.
我们也用java写过客户端, java使用CA文件格式为 jks。那么可能需要一个转换,这里使用的是java的bin目录下的keytool:
keytool -importcert -alias CA -file ca.crt -keystore ca.jks
转换的时候要求输入一个密码。这样就把ca.crt转换为了 ca.jks格式。
下面附上部分socket服务端和java版的客户端的代码。c的就不贴了,用的matrixssl。
java服务端(mina)代码片段:
String file = "/file/path/server.p12";
String keyType = "PKCS12"; char[] password = "passwd".toCharArray();
KeyStore ks = KeyStore.getInstance(keyType);
ks.load(new FileInputStream(file), password);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, password);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), null, null);

SslFilter sslFilter = new SslFilter(ctx); // 在mina的acceptor中增加这个filter就可以了。
acceptor.getFilterChain().addLast("ssl", new SslFilter(createSslContext()));

java版客户端(mina)代码片段:// trust String file = "/data/tmp/ca.jks";
String keyType = "jks"; char[] password = "123456".toCharArray();
KeyStore ks = KeyStore.getInstance(keyType);
ks.load(new FileInputStream(file), password);
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
SslFilter sslFilter = new SslFilter(sslContext);
sslFilter.setUseClientMode(true); // server端是addLast , 这个却是 addFirst. 这个顺序不能搞错了。
connector.getFilterChain().addFirst("sslFilter", sslFilter);
参考技术B 用openssl生成的SSL证书即自签名证书,存在安全隐患,而且不受浏览器信任。最好从正规第三方证书颁发机构去申请,还不用自己弄代码那么复杂,GDCA可以申请各类型SSL证书,免费付费的都有,看你需要。 参考技术C

答案:区别与信任与不信任,安全与不安全。

主要体现:

     受信任的SSL证书:会被浏览器信任认可,安全加密服务与安全扫描相关CA配套服务。 自签署的SSL证书:不会被浏览器信任,数据被泄漏级劫持安全漏洞安全风险较高。

解决办法:进入淘宝中找到Gworg,申请CA可信的SSL证书认证。

免费SSL证书和付费SSL证书有什么区别?


当你浏览某些网站时,在地址栏的URL旁边会看到一个安全锁图标对吧?这意味着该网站受保护。在黑客攻击和欺诈日益增多的时代,网站所有者和在线用户越来越关注他们的安全性。因此,安装SSL证书已成为任何网站的基本要求。

近年来,SSL证书的价格已大幅下降,甚至有一些,因此网站可以轻松部署。那么免费SSL证书和付费SSL证书有什么区别呢?如何申请免费SSL证书呢?今天就来探讨一下这些问题。

一、免费SSL证书与付费SSL证书

免费SSL证书,顾名思义是免费提供的,免费提供SSL证书目的是为所有网站提供HTTPS访问权限。付费SSL证书是由可信赖的证书颁发机构(CA)签名并颁发的,国内就是全球受信任的。

 

免费SSL证书与付费SSL证书都提供HTTPS访问,但是又有一些区别:

1、SSL证书类型

免费SSL证书一般为域名型,仅用于提供基本级别的身份验证,常用于小型网站和博客等平台。免费SSL证书没有组织验证(OV)和扩展验证(EV)证书的类型,付费SSL证书则有OV和EV类型的SSL证书,这对于保护商业网站是绝对必要的。

2、验证级别

免费SSL证书仅需基本级别的身份验证,CA机构不会验证除网站所有者身份之外的任何内容。而付费的OV/除了必须验证网站所有者的身份之外,还需要对公司和业务进行深入的验证。

3、有效期

一般CA机构提供的免费SSL证书有效期为三个月到一年。因此,网站所有者必须按时更新证书。

4、服务支持

付费的SSL证书的提供商致力于为其客户提供全天候的技术和服务支持。这些客户可以选择他们想要的任何类型的支持,无论是聊天,电子邮件还是电话。而免费的SSL证书不会帮助他们的客户获得如此卓越的支持。

5、信任程度

免费SSL证书仅地址栏显示HTTPS和安全锁图标,付费的OV和EV SSL证书除了显示HTTPS和安全锁图标,还能查询到公司详细信息,EV

SSL证书还能使地址栏变成绿色,并在地址栏直接展示公司名称。这些标识增加了客户对网站的信任度,而且客户在网站进行交易的机会大大增加。

二、免费SSL证书申请

无论是免费SSL证书还是付费SSL证书,一定要选择去受信任的CA机构申请。国内领先CA机构数安时代GDCA通过了拥有《电子认证服务许可证》,通过了WebTrust国际认证,并且已经入根到Firefox、Chrome等所有主流浏览器中,安全性和兼容性都有保障。ssl证书申请

蔚可云可提供免费的SSL证书,有效期3个月,是个人网站和广大中小型网站的最佳选择!

① 兼容性好,支持谷歌、火狐、IE、360等浏览器,移动端支持安卓9.0以上版。

② 颁发快速,最快10分钟颁发

③ SHA256位加密,2048位密钥长度,安全可靠

④ 与数安时代的付费SSL证书相同的受信任根签名

以上是关于用openssl生成的ssl证书和付费的有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

自己生成的SSL证书与购买的SSL证书有啥区别?

自己生成的SSL证书与购买的SSL证书有啥重要的区别?

阿里云 免费 ssl证书 和付费ssl证书的区别

自己生成的ssl证书与购买的ssl证书有啥区别

Linux-SSL和SSH和OpenSSH,OpenSSL有啥区别

自己生成的ssl证书与购买的ssl证书有啥区别?