MojoSSL 是一个支持国家商用密码算法的 SSL 库,基于 BoringSSL 开发,可用于开发支持国密的浏览器。如果希望使用支持国密的浏览器,请访问我的另外一个项目:Mojo Browser。
- 支持 SM2、SM3、SM4 国家商用密码算法
- 支持 TLCP 协议
- 基于 BoringSSL 开发,保持与 BoringSSL 的兼容性
- 移植自铜锁 (Tongsuo) 项目的国密算法实现
- SM4 对称加密算法当前支持 CBC 分组模式
- 支持国密密码套件 ECC_SM4_CBC_SM3 和 ECDHE_SM4_CBC_SM3
在开始构建之前,请确保您已安装以下依赖:
sudo apt install cmake ninja-build clang- 克隆 MojoSSL 仓库(如果尚未克隆):
git clone https://github.com/mogoweb/mojo-ssl.git # 进入克隆的 mojo-ssl 目录 cd mojo-ssl
- 执行构建命令:
# 假设您当前位于项目根目录 (mojo-ssl/) cmake -GNinja -B build ninja -C build - 构建完成后,编译出来的可执行程序和库文件位于
build目录。 - MojoSSL (基于 BoringSSL) 也提供了一个命令行工具
bssl,构建成功后通常位于build/bssl。
构建成功后,可以使用 bssl 命令行工具测试与支持国密算法的服务器进行通信。例如,访问沃通 (WoSign) 提供的国密测试站点:
$ build/bssl s_client -ntls -connect sm2only.ovssl.cn:443 -server-name sm2only.ovssl.cn -cipher ECC_SM4_CBC_SM3
Connecting to 61.172.183.11:443
cert_num: 4
found encrypt cert
Connected.
Version: NTLS
Resumed session: no
Cipher: ECC_SM4_CBC_SM3
Secure renegotiation: yes
Extended master secret: no
Next protocol negotiated:
ALPN protocol:
OCSP staple: no
SCT list: no
Early data: no
Encrypted ClientHello: no
Cert subject: C = CN, ST = \E5\B9\BF\E4\B8\9C\E7\9C\81, L = \E6\B7\B1\E5\9C\B3\E5\B8\82, O = \E6\B2\83\E9\80\9A\E7\94\B5\E5\AD\90\E8\AE\A4\E8\AF\81\E6\9C\8D\E5\8A\A1\E6\9C\89\E9\99\90\E5\85\AC\E5\8F\B8, CN = sm2only.ovssl.cn
Cert issuer: C = CN, O = \E6\B2\83\E9\80\9A\E7\94\B5\E5\AD\90\E8\AE\A4\E8\AF\81\E6\9C\8D\E5\8A\A1\E6\9C\89\E9\99\90\E5\85\AC\E5\8F\B8, CN = \E5\9B\BD\E5\AF\86SM2\E6\9C\8D\E5\8A\A1\E5\99\A8\E6\A0\B9\E8\AF\81\E4\B9\A6V3注意:
- 上述命令假设您的
bssl工具位于build/bssl。如果路径不同,请相应调整。 -ntls参数表示使用 TLCP 协议。-cipher ECC_SM4_CBC_SM3指定了密码套件。
如果接着输 HTTP 交互命令,可以像浏览器一样,获取服务器端的页面,比如:
GET / HTTP/1.1
Host: sm2only.ovssl.cn
Connection: close
最后要多敲一个空行(也就是输入两次回车),表示 HTTP 头部结束。
可以得到如下回应:
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Sat, 13 Sep 2025 02:32:11 GMT
Content-Type: text/html
Content-Length: 1947
Last-Modified: Fri, 18 Jul 2025 09:23:06 GMT
Connection: close
ETag: "687a127a-79b"
Guomissl: type=2
Accept-Ranges: bytes
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- InstanceBegin template="/Templates/theme.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<!-- InstanceBeginEditable name="title" -->
<title>欢迎访问沃通基于国密算法的https加密解决方案演示网站</title>
<meta name="keywords" content="欢迎访问沃通基于国密算法的https加密解决方案演示网站" />
<meta name="description" content="欢迎访问沃通基于国密算法的https加密解决方案演示网站" />
<!-- InstanceEndEditable -->
<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="applicable-device" content="pc,mobile" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="Content-Language" content="zh-cn" />
<meta content="telephone=yes" name="format-detection" />
<meta content="email=no" name="format-detection" />
<link href="images/favicon.ico" rel="shortcut icon" />
<link rel="stylesheet" href="style.css">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
</head>
<body>
<div class="gm_top">
<div class="gm_logo gm_990">
<img src="images/logo.jpg">
</div>
</div>
<div class="gm_main">
<div class="bri bri_01"></div>
<div class="bri bri_02"></div>
<div class="bri bri_03"></div>
<div class="gm_banner">
</div>
<div class="gm_con gm_990">
<p>本演示网站基于国产密码算法和相关协议搭建的Web站点,采用SM2单证书模式,支持SM2证书和国密套件进行https SSL加密通信。</p>
</div>
<div class="gm_footer gm_990">
<a href="https://www.miitbeian.gov.cn/">粤ICP备15002424号-15</a>
</div>
</div>
</body>
</html>和使用国密浏览器得到的页面一样。
我们欢迎社区的贡献!如果你发现任何 bug、有功能建议或希望改进代码,请遵循以下步骤:
- Fork 本仓库。
- 创建一个新的分支 (git checkout -b feature/your-feature-name)。
- 提交你的修改 (git commit -am 'Add some feature')。
- 推送到你的分支 (git push origin feature/your-feature-name)。
- 创建一个新的 Pull Request。
请确保你的代码符合项目的编码风格,并提供清晰的提交信息。
本项目基于 BoringSSL 开发,因此 MojoSSL 的许可证与 BoringSSL 保持一致,采用 OpenSSL 风格的许可证。
国密算法部分的实现移植自铜锁项目,其许可证信息请参考铜锁项目的官方说明。
请查看项目中的 LICENSE 文件(如果存在)获取详细信息。如果 LICENSE 文件缺失,后续会补充。