1 基础知识
1.1 断言的基本概念
1.1.1 断言的介绍
– 断言即assertion的翻译
– 断言是计算机编程的概念
– 断言目的是验证软件运行达到开发者预期的结果
– 断言位置执行到后,对应的断言应为真,否则程序将中止执行并报错
– 断言可以协助程序员编写更加稳定和高品质且稳定的代码
范例如下,
x = 1; assert x > 0; x++; assert x > 1;
1.1.2 断言的方式
assert Expression1 assert Expression1:Expression2
解析如下,
表达式“Expression1”为布尔值
表达式“Expression2”为断言失败输出的失败消息(即“Expression1”假是输出“Expression2”的消息)
1.2 SAML
1.2.1 SAML的介绍
– SAML即Security Assertion Markup Language的英文缩写
– SAML是一种交换身份验证和授权数据的开放标准
– SAML特别适用于身份提供者与服务提供者之间交换身份验证和授权数据
– SAML是一种基于XML的安全断言
1.2.2 SAML的工作原理
– 委托人(通常是人类用户),委托人向服务提供者请求服务
– 身份提供者(ldP),服务提供者向身份提供者请求并获得身份验证断言
– 服务提供者(SP),服务提供者根据身份提供者的断言决定是否为委托人提供服务
1.2.3 SAML的实例
– SSO(Web浏览器单点登录)
1.3 SimpleSAMLphp
1.3.1 SimpleSAMLphp的简介
SimpleSAMLphp由PHP编写
SimpleSAMLphp用户处理身份验证
1.3.2 SimpleSAMLphp的功能
– 基于SAML 2.0成为服务提供商(SP)
– 基于SAML 2.0成为身份提供者(IdP)
1.3.3 SimpleSAMLphp支持的身份协议和框架
– A-Select
– CAS
– OpenID
– WF-Federation
– OAuth
1.3.4 SimpleSAMLphp支持的模块
详细请参阅 以下链接,
https://simplesamlphp.org/modules/
1.3.5 运行环境
– PHP 7.2.0及以上版本
– 必要的扩展,date、dom、hash、intl、json、libxml、mbstring、openssl、pcre、SPL、zlib
– 可选扩展,cURL、ldap、radius、session、memcache、predis(redis)
– 数据库扩展,pdo、mysql、pgsql等
2 最佳实践
2.1 系统环境
2.1.1 环境信息
OS = RHEL 8.x x86_64
IP Address = any
Host Name = simplesamlphp.cmdschool.org
2.1.2 更新系统
dnf update -y
2.1 部署PHP环境
2.1.1 部署PHP环境
2.1.2 确定已经安装的模块
php -m
快速的方法,我们使用如下命令,
php -m | grep -i date
2.1.3 安装扩展intl
cd ~/php-7.4.11/ext/intl/ phpize ./configure make make install
如果遇到如下错误提示,
configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met: Package 'icu-uc', required by 'virtual:world', not found Package 'icu-io', required by 'virtual:world', not found Package 'icu-i18n', required by 'virtual:world', not found
使用如下命令解决依赖关系,
dnf install -y libicu-devel
2.1.4 安装扩展mbstring
cd ~/php-7.4.11/ext/mbstring/ phpize ./configure make make install
如果遇到如下错误提示,
configure: error: Package requirements (oniguruma) were not met: Package 'oniguruma', required by 'virtual:world', not found
使用如下命令解决依赖关系,
dnf install -y oniguruma-devel
2.1.5 安装扩展openssl
cd ~/php-7.4.11/ext/openssl/ cp config0.m4 config.m4 phpize ./configure make make install
2.1.6 安装扩展zlib
cd ~/php-7.4.11/ext/zlib/ cp config0.m4 config.m4 phpize ./configure make make install
2.1.7 安装扩展curl
cd ~/php-7.4.11/ext/curl/ phpize ./configure make make install
如果遇到如下错误提示,
configure: error: Package requirements (libcurl >= 7.29.0) were not met: Package 'libcurl', required by 'virtual:world', not found
使用如下命令解决依赖关系,
dnf install -y libcurl-devel
2.1.8 安装扩展ldap
cd ~/php-7.4.11/ext/ldap/ phpize ./configure make make install
如果遇到如下错误提示,
configure: error: Cannot find ldap.h
使用如下命令解决依赖关系,
dnf install -y openldap-devel
如果遇到如下错误提示,
configure: error: Cannot find ldap libraries in /usr/lib.
使用如下命令解决依赖关系,
ln -s /usr/lib64/libldap.so /usr/lib/
2.1.9 加载扩展
vim /etc/php.ini
加入如下配置,
extension=intl.so extension=mbstring.so extension=openssl.so extension=zlib.so extension=curl.so extension=ldap.so
配置修改后,你需要重载服务使配置生效,
systemctl reload httpd.service
2.2 部署SimpleSAMLphp
2.2.1 下载软件包
cd ~ wget https://github.com/simplesamlphp/simplesamlphp/releases/download/v1.19.5/simplesamlphp-1.19.5.tar.gz
2.2.2 解压软件包
cd ~ tar -xf simplesamlphp-1.19.5.tar.gz
2.2.3 部署软件包
cd ~ mv simplesamlphp-1.19.5 /var/www/simplesamlphp chown apache:apache -R /var/www/simplesamlphp/ chmod 775 -R /var/www/simplesamlphp/
2.3 配置SimpleSAMLphp
2.3.1 创建虚拟服务器配置
vim /etc/httpd/conf.d/simplesamlphp.conf
加入如下配置,
<VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES SSLCertificateFile /etc/httpd/simplesamlphp.cmdschool.org.crt SSLCertificateKeyFile /etc/httpd/simplesamlphpcmdschool.org.key SSLCertificateChainFile /etc/httpd/TrustedRoot.crt DocumentRoot /var/www/simplesamlphp/www ServerName simplesamlphp.cmdschool.org </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/simplesamlphp/www ServerName simplesamlphp.cmdschool.org RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R] </VirtualHost> <Directory /var/www/simplesamlphp/www> Require all granted </Directory>
根据上面的配置,我们需要使用如下命令启动重写模块,
sed -i "s/#LoadModule rewrite_module modules\/mod_rewrite.so/LoadModule rewrite_module modules\/mod_rewrite.so/g" /etc/httpd/httpd.conf
配置应用的证书可到腾讯云申请,详细请查阅下文,此处不再详述,
https://cloud.tencent.com/product/ssl
创建配置文件后,我们使用如下命令验证配置,
httpd -t
确认配置有效后,你需要使用如下命令重载服务使配置生效,
systemctl reload httpd.service
2.3.2 修改配置文件
cp /var/www/simplesamlphp/config/config.php /var/www/simplesamlphp/config/config.php.default vim /var/www/simplesamlphp/config/config.php
参数修改如下,
$config = [ #... 'baseurlpath' => '/', 'auth.adminpassword' => 'adminpwd', 'technicalcontact_name' => 'Administrator', 'technicalcontact_email' => 'will@cmdschool.org', 'language.default' => 'en', 'timezone' => 'Asia/Shanghai', #... ];
参数解析如下,
– 参数“baseurlpath”声明登录的站点跟路径
– 参数“auth.adminpassword”声明管理员登录的密码
– 参数“auth.adminpassword”声明管理员登录的密码
– 参数“technicalcontact_name”声明管理员名称
– 参数“technicalcontact_email”声明管理员邮箱地址
– 参数“language.default”声明系统的默认语言
– 参数“timezone”声明系统的默认时区
然后,你需要使用人如下命令修改“secretsalt”参数的“secret salt”以便生成加密的安全哈希,
SECRET="$(tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo)" sed -i "s~defaultsecretsalt~$SECRET~g" /var/www/simplesamlphp/config/config.php
修改后,请使用如下命令确认,
grep -i "'secretsalt' =>" /var/www/simplesamlphp/config/config.php
可见如下输出,
'secretsalt' => 'nfh3pqdroquhdnhadglu3x89qh0xrr98',
2.3.3 测试登录
https://simplesamlphp.cmdschool.org
登录信息如下,
admin username: admin
admin password: adminpwd
参阅文档
==================
SimpleSAMLphp官方安装教程
————
https://simplesamlphp.org/docs/latest/simplesamlphp-install.html
SimpleSAMLphp官方主页
—————–
https://simplesamlphp.org/
SimpleSAMLphp官方github
—————–
https://github.com/simplesamlphp/simplesamlphp
SimpleSAMLphp文档
—————–
https://simplesamlphp.org/docs/latest/index.html
断言的概念
—————–
https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
https://baike.baidu.com/item/%E6%96%AD%E8%A8%80/13021995?fr=aladdin
SAML的概念
————-
https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
没有评论