如何部署simpleSAMLphp?

目录或认证服务

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环境

如何编译安装Apache+PHP7.4.11?

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

没有评论

发表回复

目录或认证服务
如何解决SSSD的用户条目的UPN与PAC不匹配问题?

1 前言 一个问题,一篇文章,一出故事。 今天遇到域用户输入正确的用户名和密码不能登录问题,详细错误 …

目录或认证服务
如何解决SSSD的多域用户ID冲突问题?

1 前言 一个问题,一篇文章,一出故事。 笔者在生产环境中遇到SSSD因为同时使用两个不同的域导致U …

目录或认证服务
如何部署Oracle Linux 9.x simpleSAMLphp 2.1.3?

1 基础知识 1.1 断言的基本概念 1.1.1 断言的介绍 – 断言即assertio …