Hello,

In case it helps others, to encrypt/sign the "clientSecret" in an OIDC 
service, you have to use the following command in the CAS Shell :

cipher-text --value secret --encryption-key <value of 
cas.authn.oauth.crypto.encryption.key property> --encryption-key-size 
<value of cas.authn.oauth.crypto.encryption.key-size property, default: 
256> --signing-key <value of cas.authn.oauth.crypto.signing.key property> 
--signing-key-size <value of cas.authn.oauth.crypto.signing.key-size 
property, default: 512>

Then you can use the produced "encoded value" prefixed by {cas-cipher}

-Frederic


On Wednesday, November 18, 2020 at 7:21:26 PM UTC+1 Ken Hopkins wrote:

> Thanks Ray.
> The first four lines of the cas log seem to suggest that the configuration 
> is being read properly:
> 2020-11-18 11:51:34,719 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
> - <Configured Jasypt algorithm [PBEWithMD5AndDES]>
> 2020-11-18 11:51:34,723 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
> - <Configured Jasypt password>
> 2020-11-18 11:51:34,723 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
> - <Configured Jasypt provider>
> 2020-11-18 11:51:34,725 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
> - <Configured Jasypt iterations>
>
> However, you may be on to something.  I removed the provider and algorithm 
> from my start-up command:
> java -jar build/libs/cas.war 
> --cas.standalone.configurationSecurity.iterations=1000 
> --cas.standalone.configurationSecurity.psw=siMdrGQcecY5_orN3Zo_gZN-oAwqWmvOEKpxhp02bGF8VdJ5rdi8IfJ2NklWkqVvK9uMEAGHZwD_Qsd9UUjAbQ
>
> The start of the log now looks like:
>
>
> *2020-11-18 13:11:25,966 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
> - <Configured Jasypt algorithm [PBEWithMD5AndTripleDES]>2020-11-18 
> 13:11:25,971 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] - 
> <Configured Jasypt password>2020-11-18 13:11:25,973 DEBUG 
> [org.apereo.cas.util.crypto.CipherExecutor] - <Configured Jasypt 
> iterations>*
>
>
>
>      _    ____  _____ ____  _____ ___     ____    _    ____  
>     / \  |  _ \| ____|  _ \| ____/ _ \   / ___|  / \  / ___| 
>    / _ \ | |_) |  _| | |_) |  _|| | | | | |     / _ \ \___ \ 
>   / ___ \|  __/| |___|  _ <| |__| |_| | | |___ / ___ \ ___) |
>  /_/   \_\_|   |_____|_| \_\_____\___/   \____/_/   \_\____/ 
>                                                              
>
> CAS Version: 6.2.5
> CAS Branch: 6.2.x
> CAS Commit Id: cde05dab3b560a449036d61290ebcb4cf56eb0a2
> CAS Build Date/Time: 2020-11-03T03:51:10Z
> Spring Boot Version: 2.2.8.RELEASE
> Spring Version: 5.2.6.RELEASE
> Java Home: /usr/lib/jvm/java-11-openjdk-amd64
> Java Vendor: Ubuntu
> Java Version: 11.0.9.1
> JVM Free Memory: 560 MB
>
> JVM Maximum Memory: 9 GB
> JVM Total Memory: 1022 MB
>
> JCE Installed: Yes
> OS Architecture: amd64
> OS Name: Linux
> OS Version: 5.4.0-54-generic
> OS Date/Time: 2020-11-18T13:11:26.595293
>
> OS Temp Directory: /tmp
> ------------------------------------------------------------
> Apache Tomcat Version: Apache Tomcat/9.0.39
> ------------------------------------------------------------
>
>
> 2020-11-18 13:11:26,621 DEBUG 
> [org.apereo.cas.configuration.DefaultCasConfigurationPropertiesSourceLocator] 
> - <Located CAS standalone configuration directory at [null]>
> 2020-11-18 13:11:26,621 INFO 
> [org.apereo.cas.configuration.DefaultCasConfigurationPropertiesSourceLocator] 
> - <Configuration directory [null] is not a directory or cannot be found at 
> the specific path>
> 2020-11-18 13:11:26,633 INFO 
> [org.apereo.cas.configuration.loader.YamlConfigurationPropertiesLoader] - 
> <Found settings [[server.ssl.enabled]] in YAML file [class path resource 
> [application.yml]]>
>
>
>
>
> *2020-11-18 13:11:26,635 TRACE [org.apereo.cas.util.crypto.CipherExecutor] 
> - <Attempting to decode key [server.ssl.enabled]>2020-11-18 13:11:26,635 
> DEBUG [org.apereo.cas.util.crypto.CipherExecutor] - <Initializing 
> Jasypt...>2020-11-18 13:11:26,647 TRACE 
> [org.apereo.cas.util.crypto.CipherExecutor] - <Decrypting value 
> [bRgoFJzNOBogeWGrty800g==]...>2020-11-18 13:11:26,655 DEBUG 
> [org.apereo.cas.util.crypto.CipherExecutor] - <Decrypted value 
> [bRgoFJzNOBogeWGrty800g==] successfully.>2020-11-18 13:11:26,655 TRACE 
> [org.apereo.cas.util.crypto.CipherExecutor] - <Decrypted key 
> [server.ssl.enabled] successfully>*
> 2020-11-18 13:11:26,672 INFO [org.apereo.cas.web.CasWebApplication] - <The 
> following profiles are active: standalone>
> 2020-11-18 13:11:26,870 TRACE 
> [org.apereo.cas.web.CasWebApplicationContext] - <Refreshing 
> CasWebApplicationContext()>
> 2020-11-18 13:11:29,896 TRACE 
> [org.apereo.cas.web.CasWebApplicationContext] - <Using MessageSource 
> [org.apereo.cas.web.view.CasReloadableMessageBundle: 
> basenames=[classpath:custom_messages, classpath:messages]]>
> 2020-11-18 13:11:29,896 TRACE 
> [org.apereo.cas.web.CasWebApplicationContext] - <No 
> 'applicationEventMulticaster' bean, using 
> [SimpleApplicationEventMulticaster]>
> 2020-11-18 13:11:29,921 ERROR 
> [org.apereo.cas.configuration.CasConfigurationPropertiesValidator] - <
>
> Failed to bind properties under 'cas' to 
> org.apereo.cas.configuration.CasConfigurationProperties
>
>     cas.standalone.configurationsecurity.iterations = 1000 (Origin: 
> "cas.standalone.configurationSecurity.iterations" from property source 
> "commandLineArgs")
>
> Listed settings above are no longer recognized by CAS 6.2.5. They may have 
> been renamed, removed, or relocated to a new address in the CAS 
> configuration schema. CAS will ignore such settings and will proceed with 
> its normal initialization sequence. Please consult the CAS documentation to 
> review and adjust each setting to find an alternative or remove the 
> definition. Failure to do so puts the stability of the CAS server 
> deployment in danger and complicates future upgrades.
> >
>
>
> I've bolded a couple of important things to note.  And my server came up.  
> Wow, looking back it looks like I was specifying the wrong algorithm when I 
> started the server.  DES instead of TripleDES.  Doh.
>
> Well, that's good.  Thanks Ray.
>
> I'll see if this gets me any closer to getting encryption to work in the 
> oauth service registry.
> On Wednesday, November 18, 2020 at 12:57:00 PM UTC-5 Ray Bon wrote:
>
>> Kenneth,
>>
>> Perhaps the properties need to be set in the config file (if jasypt is 
>> reading directly), maybe the encryption bit size or algorithm.
>>
>> Ray
>>
>> On Wed, 2020-11-18 at 12:22 -0500, Kenneth Hopkins wrote:
>>
>> Notice: This message was sent from outside the University of Victoria 
>> email system. Please be cautious with links and sensitive information. 
>>
>>
>> My end goal is to encrypt the client secret in my service json registry 
>> as suggested here: 
>> https://apereo.github.io/2019/11/04/cas62x-oauth-jwt-access-token/#bonus
>>
>> So far it isn't working for me.  In an effort to troubleshoot, I tried 
>> starting with trying to just encrypt some configuration properties: 
>> https://apereo.github.io/cas/6.2.x/configuration/Configuration-Properties-Security.html#standalone
>>
>> That also is not working for me.
>>
>> In an effort to simplify what I was looking at, I started with a clean 
>> download of the cas-overlay-template.  I started with the 
>> server.ssl.enabled property just for the sake of the test, but other 
>> properties seem to have the same problem.  I added an *application.yml* 
>> file to *src/main/resources* with a single property in it:
>>
>>
>>
>> *server:   ssl:     enabled: '{cas-cipher}bRgoFJzNOBogeWGrty800g=='*
>>
>> I got the encrypted value from running the cas commandline shell:
>>
>> cas>encrypt-value --alg PBEWithMD5AndTripleDES --iterations 1000 
>> --provider SunJCE --password 
>> siMdrGQcecY5_orN3Zo_gZN-oAwqWmvOEKpxhp02bGF8VdJ5rdi8IfJ2NklWkqVvK9uMEAGHZwD_Qsd9UUjAbQ
>>  
>> --value false
>> ==== Encrypted Value ====
>> {cas-cipher}bRgoFJzNOBogeWGrty800g==
>>
>> And I started my cas server like this:
>>
>> java -jar build/libs/cas.war 
>> --cas.standalone.configurationSecurity.alg=PBEWithMD5AndDES 
>> --cas.standalone.configurationSecurity.provider=SunJCE 
>> --cas.standalone.configurationSecurity.iterations=1000 
>> --cas.standalone.configurationSecurity.psw=siMdrGQcecY5_orN3Zo_gZN-oAwqWmvOEKpxhp02bGF8VdJ5rdi8IfJ2NklWkqVvK9uMEAGHZwD_Qsd9UUjAbQ
>>
>> The start of the CAS log looks like this:
>>
>> 2020-11-18 11:51:34,719 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Configured Jasypt algorithm [PBEWithMD5AndDES]>
>> 2020-11-18 11:51:34,723 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Configured Jasypt password>
>> 2020-11-18 11:51:34,723 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Configured Jasypt provider>
>> 2020-11-18 11:51:34,725 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Configured Jasypt iterations>
>>
>>
>>      _    ____  _____ ____  _____ ___     ____    _    ____  
>>     / \  |  _ \| ____|  _ \| ____/ _ \   / ___|  / \  / ___| 
>>    / _ \ | |_) |  _| | |_) |  _|| | | | | |     / _ \ \___ \ 
>>   / ___ \|  __/| |___|  _ <| |__| |_| | | |___ / ___ \ ___) |
>>  /_/   \_\_|   |_____|_| \_\_____\___/   \____/_/   \_\____/ 
>>                                                              
>>
>> CAS Version: 6.2.5
>> CAS Branch: 6.2.x
>> CAS Commit Id: cde05dab3b560a449036d61290ebcb4cf56eb0a2
>> CAS Build Date/Time: 2020-11-03T03:51:10Z
>> Spring Boot Version: 2.2.8.RELEASE
>> Spring Version: 5.2.6.RELEASE
>> Java Home: /usr/lib/jvm/java-11-openjdk-amd64
>> Java Vendor: Ubuntu
>> Java Version: 11.0.9.1
>> JVM Free Memory: 504 MB
>> JVM Maximum Memory: 9 GB
>> JVM Total Memory: 924 MB
>> JCE Installed: Yes
>> OS Architecture: amd64
>> OS Name: Linux
>> OS Version: 5.4.0-54-generic
>> OS Date/Time: 2020-11-18T11:51:35.335785
>> OS Temp Directory: /tmp
>> ------------------------------------------------------------
>> Apache Tomcat Version: Apache Tomcat/9.0.39
>> ------------------------------------------------------------
>>
>>
>> 2020-11-18 11:51:35,359 DEBUG 
>> [org.apereo.cas.configuration.DefaultCasConfigurationPropertiesSourceLocator]
>>  
>> - <Located CAS standalone configuration directory at [null]>
>> 2020-11-18 11:51:35,360 INFO 
>> [org.apereo.cas.configuration.DefaultCasConfigurationPropertiesSourceLocator]
>>  
>> - <Configuration directory [null] is not a directory or cannot be found at 
>> the specific path>
>> 2020-11-18 11:51:35,367 INFO 
>> [org.apereo.cas.configuration.loader.YamlConfigurationPropertiesLoader] - 
>> <Found settings [[server.ssl.enabled]] in YAML file [class path resource 
>> [application.yml]]>
>> 2020-11-18 11:51:35,369 TRACE [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Attempting to decode key [server.ssl.enabled]>
>> 2020-11-18 11:51:35,369 DEBUG [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Initializing Jasypt...>
>> 2020-11-18 11:51:35,382 TRACE [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Decrypting value [bRgoFJzNOBogeWGrty800g==]...>
>> 2020-11-18 11:51:35,389 ERROR [org.apereo.cas.util.crypto.CipherExecutor] 
>> - <Could not decrypt value [{cas-cipher}bRgoFJzNOBogeWGrty800g==]>
>> org.jasypt.exceptions.EncryptionOperationNotPossibleException: null
>>     at 
>> org.jasypt.encryption.pbe.StandardPBEByteEncryptor.decrypt(StandardPBEByteEncryptor.java:1169)
>>  
>> ~[jasypt-1.9.3.jar!/:?]
>>     at 
>> org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:738)
>>  
>> ~[jasypt-1.9.3.jar!/:?]
>>     at 
>> org.apereo.cas.configuration.support.CasConfigurationJasyptCipherExecutor.decryptValuePropagateExceptions(CasConfigurationJasyptCipherExecutor.java:215)
>>  
>> ~[cas-server-core-api-configuration-model-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.support.CasConfigurationJasyptCipherExecutor.decryptValue(CasConfigurationJasyptCipherExecutor.java:196)
>>  
>> ~[cas-server-core-api-configuration-model-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.support.CasConfigurationJasyptCipherExecutor.decode(CasConfigurationJasyptCipherExecutor.java:154)
>>  
>> ~[cas-server-core-api-configuration-model-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.support.CasConfigurationJasyptCipherExecutor.decode(CasConfigurationJasyptCipherExecutor.java:22)
>>  
>> ~[cas-server-core-api-configuration-model-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.util.crypto.CipherExecutor.lambda$decode$0(CipherExecutor.java:120)
>>  
>> ~[cas-server-core-api-util-6.2.5.jar!/:6.2.5]
>>     at 
>> java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1603) 
>> ~[?:?]
>>     at java.util.Properties.forEach(Properties.java:1443) ~[?:?]
>>     at 
>> org.apereo.cas.util.crypto.CipherExecutor.decode(CipherExecutor.java:117) 
>> ~[cas-server-core-api-util-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.loader.BaseConfigurationPropertiesLoader.decryptProperties(BaseConfigurationPropertiesLoader.java:46)
>>  
>> ~[cas-server-core-configuration-api-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.loader.YamlConfigurationPropertiesLoader.load(YamlConfigurationPropertiesLoader.java:36)
>>  
>> ~[cas-server-core-configuration-api-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.DefaultCasConfigurationPropertiesSourceLocator.loadEmbeddedYamlOverriddenProperties(DefaultCasConfigurationPropertiesSourceLocator.java:153)
>>  
>> ~[cas-server-core-configuration-api-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.DefaultCasConfigurationPropertiesSourceLocator.locate(DefaultCasConfigurationPropertiesSourceLocator.java:71)
>>  
>> ~[cas-server-core-configuration-api-6.2.5.jar!/:6.2.5]
>>     at 
>> org.apereo.cas.configuration.config.CasCoreBootstrapStandaloneConfiguration.locate(CasCoreBootstrapStandaloneConfiguration.java:52)
>>  
>> ~[cas-server-core-configuration-6.2.5.jar!/:6.2.5]
>>     at 
>> org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:52)
>>  
>> ~[spring-cloud-context-2.2.2.RELEASE.jar!/:2.2.2.RELEASE]
>>     at 
>> org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:47)
>>  
>> ~[spring-cloud-context-2.2.2.RELEASE.jar!/:2.2.2.RELEASE]
>>     at 
>> org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:97)
>>  
>> ~[spring-cloud-context-2.2.2.RELEASE.jar!/:2.2.2.RELEASE]
>>     at 
>> org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:626)
>>  
>> ~[spring-boot-2.2.8.RELEASE.jar!/:2.2.8.RELEASE]
>>     at 
>> org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:370)
>>  
>> ~[spring-boot-2.2.8.RELEASE.jar!/:2.2.8.RELEASE]
>>     at 
>> org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 
>> ~[spring-boot-2.2.8.RELEASE.jar!/:2.2.8.RELEASE]
>>     at 
>> org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140)
>>  
>> ~[spring-boot-2.2.8.RELEASE.jar!/:2.2.8.RELEASE]
>>     at 
>> org.apereo.cas.web.CasWebApplication.main(CasWebApplication.java:80) 
>> ~[cas-server-webapp-init-6.2.5.jar!/:6.2.5]
>>     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
>> Method) ~[?:?]
>>     at 
>> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>  
>> ~[?:?]
>>     at 
>> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>  
>> ~[?:?]
>>     at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
>>     at 
>> org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
>>  
>> ~[cas.war:?]
>>     at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 
>> ~[cas.war:?]
>>     at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) 
>> ~[cas.war:?]
>>     at 
>> org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:58) 
>> ~[cas.war:?]
>> 2020-11-18 11:51:35,405 INFO [org.apereo.cas.web.CasWebApplication] - 
>> <The following profiles are active: standalone>
>> 2020-11-18 11:51:35,613 TRACE 
>> [org.apereo.cas.web.CasWebApplicationContext] - <Refreshing 
>> CasWebApplicationContext()>
>> 2020-11-18 11:51:38,897 TRACE 
>> [org.apereo.cas.web.CasWebApplicationContext] - <Using MessageSource 
>> [org.apereo.cas.web.view.CasReloadableMessageBundle: 
>> basenames=[classpath:custom_messages, classpath:messages]]>
>> 2020-11-18 11:51:38,897 TRACE 
>> [org.apereo.cas.web.CasWebApplicationContext] - <No 
>> 'applicationEventMulticaster' bean, using 
>> [SimpleApplicationEventMulticaster]>
>> 2020-11-18 11:51:38,925 ERROR 
>> [org.apereo.cas.configuration.CasConfigurationPropertiesValidator] - <
>> Failed to bind properties under 'cas' to 
>> org.apereo.cas.configuration.CasConfigurationProperties
>>
>>     cas.standalone.configurationsecurity.iterations = 1000 (Origin: 
>> "cas.standalone.configurationSecurity.iterations" from property source 
>> "commandLineArgs")
>>
>> Listed settings above are no longer recognized by CAS 6.2.5. They may 
>> have been renamed, removed, or relocated to a new address in the CAS 
>> configuration schema. CAS will ignore such settings and will proceed with 
>> its normal initialization sequence. Please consult the CAS documentation to 
>> review and adjust each setting to find an alternative or remove the 
>> definition. Failure to do so puts the stability of the CAS server 
>> deployment in danger and complicates future upgrades.
>>
>> Unfortunately, for security reasons, jasypt gives no details as to why 
>> the decryption failed.  I've tried several different things, but haven't 
>> gotten the decryption working.  The above error isn't the only one I've 
>> seen, but it seems to be the exception I'm seeing when I think that my 
>> steps should be correct.
>>
>> I do see the error from 
>> org.apereo.cas.configuration.CasConfigurationPropertiesValidator at the 
>> end of the log, and that seems to be a discrepancy between the code, the 
>> documentation, and the configuration-model.  However, I don't think it is 
>> relevant to this problem because the CasConfigurationJasyptCipherExecutor 
>> seems to load the configuration directly from the property names, instead 
>> of using the configuration model.
>>
>> Figuring out how to encrypt properties would be nice, but my ultimate 
>> goal is trying to encrypt the clientSecret in the service json file for an 
>> oauth service.  That isn't working for me either.  
>> https://apereo.github.io/2019/11/04/cas62x-oauth-jwt-access-token/#bonus  
>> If it isn't worth trying to figure out configuration encryption, then I can 
>> provide more details about the problems I'm having trying to configure an 
>> encrypted clientSecret.
>>
>> Thanks for any insights.
>>
>>
>> This e-mail contains information from eOriginal, Inc. that may be 
>> proprietary, confidential and/or subject to a nondisclosure agreement. If 
>> you are not an intended recipient, please notify the sender immediately and 
>> delete this e-mail from your computer. To the extent required under any 
>> applicable nondisclosure agreement, the information contained in this 
>> e-mail is marked CONFIDENTIAL. 
>>
>> -- 
>>
>> Ray Bon
>> Programmer Analyst
>> Development Services, University Systems
>> 2507218831 <(250)%20721-8831> | CLE 019 | [email protected]
>>
>> I respectfully acknowledge that my place of work is located within the 
>> ancestral, traditional and unceded territory of the Songhees, Esquimalt and 
>> WSÁNEĆ Nations.
>>
>

-- 
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/abebb433-1200-43e4-bd00-abcbcd66abccn%40apereo.org.

Reply via email to