rwdj opened a new issue, #6246:
URL: https://github.com/apache/cloudstack/issues/6246

   <!--
   Verify first that your issue/request is not already reported on GitHub.
   Also test if the latest release and main branch are affected too.
   Always add information AFTER of these HTML comments, but no need to delete 
the comments.
   -->
   
   ##### ISSUE TYPE
   <!-- Pick one below and delete the rest -->
    * Bug Report
   
   ##### COMPONENT NAME
   <!--
   Categorize the issue, e.g. API, VR, VPN, UI, etc.
   -->
   ~~~
   UI, more?
   ~~~
   
   ##### CLOUDSTACK VERSION
   <!--
   New line separated list of affected versions, commit ID for issues on main 
branch.
   -->
   
   ~~~
   4.16
   ~~~
   
   ##### CONFIGURATION
   <!--
   Information about the configuration if relevant, e.g. basic network, 
advanced networking, etc.  N/A otherwise
   -->
   
   
   
   ##### OS / ENVIRONMENT
   <!--
   Information about the environment if relevant, N/A otherwise
   -->
   RHEL 8 FIPS compliant system
   
   ##### SUMMARY
   <!-- Explain the problem/feature briefly -->
   Cloudstack uses multiple instances of non-FIPS-compliant features. This 
makes it impossible to work with in a FIPS compliant environment.
   
   ##### STEPS TO REPRODUCE
   <!--
   For bugs, show exactly how to reproduce the problem, using a minimal 
test-case. Use Screenshots if accurate.
   
   For new features, show how the feature would be used.
   -->
   On a FIPS compliant system, build as instructed in 
https://docs.cloudstack.apache.org/en/latest/installguide/building_from_source.html:
   ~~~
   $ mvn -P deps
   ~~~
   On a FIPS compliant RHEL8 system, install and run 
cloudstack-management.service.
   ~~~
   [root@rwdj ~]# systemctl stop firewalld nftables
   [root@rwdj ~]# systemctl start iptables
   [root@rwdj ~]# dnf install cloudstack-management mysql-connector-java
   [root@rwdj ~]# cloudstack-setup-databases cloud:<omitted> 
--deploy-as=root:<omitted> -i 127.0.0.1
   # See #6232 for why I do the next two steps
   [root@rwdj ~]# chown :cloud /etc/cloudstack/management/key
   [root@rwdj ~]# chmod 0640 /etc/cloudstack/management/key
   [root@rwdj ~]# cloudstack-setup-management
   ~~~
   
   <!-- You can also paste gist.github.com links for larger files -->
   
   ##### EXPECTED RESULTS
   <!-- What did you expect to happen when running the steps above? -->
   
   ~~~
   Able to build or run cloudstack-management.
   ~~~
   
   ##### ACTUAL RESULTS
   <!-- What actually happened? -->
   
   <!-- Paste verbatim command output between quotes below -->
   <!-- Paste example playbooks or commands between quotes below -->
   Build
   ~~~
   $ mvn -P deps
   
   [INFO] Running com.cloud.utils.testcase.NioTest                              
                                                                                
       
   2022-04-11 13:55:28,671 INFO  [utils.testcase.NioTest] (main:) Setting up 
Benchmark Test                                                                  
          
   2022-04-11 13:55:28,695 INFO  [utils.nio.NioServer] (main:) NioServer 
started and listening on /0:0:0:0:0:0:0:0:41907                                 
              
   2022-04-11 13:55:28,714 DEBUG [utils.testcase.NioTest] (Time-limited test:) 
0/2 tests done. Waiting for completion                                          
        
   2022-04-11 13:55:28,720 INFO  [utils.testcase.NioTest] 
(MaliciousNioClientHandler-2:) Connecting to 127.0.0.1:41907                    
                             
   2022-04-11 13:55:28,720 INFO  [utils.nio.NioClient] (NioClientHandler-1:) 
Connecting to 127.0.0.1:41907                                                   
          
   2022-04-11 13:55:28,720 INFO  [utils.nio.NioClient] (NioClientHandler-2:) 
Connecting to 127.0.0.1:41907                                                   
          
   2022-04-11 13:55:28,720 INFO  [utils.testcase.NioTest] 
(MaliciousNioClientHandler-1:) Connecting to 127.0.0.1:41907                    
                             
   2022-04-11 13:55:29,715 DEBUG [utils.testcase.NioTest] (Time-limited test:) 
0/2 tests done. Waiting for completion                                          
        
   2022-04-11 13:55:30,715 DEBUG [utils.testcase.NioTest] (Time-limited test:) 
0/2 tests done. Waiting for completion                                          
        
   2022-04-11 13:55:31,716 DEBUG [utils.testcase.NioTest] (Time-limited test:) 
0/2 tests done. Waiting for completion                                          
        
   2022-04-11 13:55:32,003 WARN  [utils.nio.Link] (NioClientHandler-2:) Failed 
to load keystore, using trust all manager                                       
        
   2022-04-11 13:55:32,003 WARN  [utils.nio.Link] (NioClientHandler-1:) Failed 
to load keystore, using trust all manager                                       
        
   2022-04-11 13:55:32,041 ERROR [utils.nio.Link] 
(NioTestServer-NioConnectionHandler-1:) CA service is not configured, 
by-passing CA manager to create SSL engine     
   2022-04-11 13:55:32,043 ERROR [utils.nio.NioConnection] 
(NioClientHandler-1:) Unable to initialize the threads.                         
                            
   java.io.IOException: Failed to initialise security                           
                                                                                
       
           at com.cloud.utils.nio.NioClient.init(NioClient.java:82)             
                                                                                
       
           at com.cloud.utils.nio.NioConnection.start(NioConnection.java:95)    
                                                                                
       
           at 
com.cloud.utils.testcase.NioTest$ThreadedNioClient.run(NioTest.java:172)        
                                                                         
           at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
                                                                        
           at 
java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)              
                                                                         
           at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
                                                                
           at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
                                                                
           at java.base/java.lang.Thread.run(Thread.java:829)                   
                                                                                
       
   Caused by: java.security.KeyManagementException: FIPS mode: only SunJSSE 
TrustManagers may be used                                                       
           
           at 
java.base/sun.security.ssl.SSLContextImpl.chooseTrustManager(SSLContextImpl.java:133)
                                                                    
           at 
java.base/sun.security.ssl.SSLContextImpl.engineInit(SSLContextImpl.java:95)    
                                                                         
           at java.base/javax.net.ssl.SSLContext.init(SSLContext.java:297)      
                                                                                
       
           ... 9 more
   [...]
   [INFO] Running com.cloud.utils.rest.HttpClientHelperTest                     
                                                                                
       
   [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 
0.116 s <<< FAILURE! - in com.cloud.utils.rest.HttpClientHelperTest             
            
   [ERROR] testCreateClient(com.cloud.utils.rest.HttpClientHelperTest)  Time 
elapsed: 0.115 s  <<< ERROR!                                                    
          
   java.security.KeyManagementException: FIPS mode: only SunJSSE TrustManagers 
may be used                                                                     
        
           at 
com.cloud.utils.rest.HttpClientHelperTest.testCreateClient(HttpClientHelperTest.java:33)
                                                                 
                                                                                
                                                                                
       
   [INFO] Running com.cloud.utils.rest.BasicRestClientTest                      
                                                                                
       
   [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 
0.087 s <<< FAILURE! - in com.cloud.utils.rest.BasicRestClientTest              
            
   [ERROR] com.cloud.utils.rest.BasicRestClientTest  Time elapsed: 0.087 s  <<< 
ERROR!                                                                          
       
   java.security.KeyManagementException: FIPS mode: only SunJSSE TrustManagers 
may be used                                                                     
        
           at 
com.cloud.utils.rest.BasicRestClientTest.setupClass(BasicRestClientTest.java:62)
   ~~~
   Run.
   ~~~
   INFO  [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) 
Loading module context [system] from URL 
[jar:file:/usr/share/cloudstack-management/lib/cloudstac
   
k-4.16.1.0.jar!/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml]
                                                                                
   WARNING: An illegal reflective access operation has occurred                 
                                                                                
          
   WARNING: Illegal reflective access by net.sf.cglib.core.ReflectUtils$1 
(file:/usr/share/cloudstack-management/lib/cloudstack-4.16.1.0.jar) to method 
java.lang.ClassLoa
   
der.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) 
                                                                                
       
   WARNING: Please consider reporting this to the maintainers of 
net.sf.cglib.core.ReflectUtils$1                                                
                         
   WARNING: Use --illegal-access=warn to enable warnings of further illegal 
reflective access operations                                                    
              
   WARNING: All illegal access operations will be denied in a future release    
                                                                                
          
   INFO  [c.c.u.d.T.Transaction] (main:null) (logid:) Is Data Base High 
Availiability enabled? Ans : false                                              
                  
   WARN  [c.c.u.d.T.Transaction] (main:null) (logid:) Unable to load db 
configuration, using defaults with 5 connections. Falling back on assumed 
datasource on localhost:
   3306 using username:password=cloud:cloud. Please check your configuration    
                                                                                
          
   org.jasypt.exceptions.EncryptionInitializationException: 
java.security.NoSuchAlgorithmException: PBEWithMD5AndDES SecretKeyFactory not 
available                       
           at 
org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:773)
                                                            
           at 
org.jasypt.encryption.pbe.StandardPBEStringEncryptor.initialize(StandardPBEStringEncryptor.java:566)
                                                        
           at 
org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:718)
                                                           
           at 
org.jasypt.properties.PropertyValueEncryptionUtils.decrypt(PropertyValueEncryptionUtils.java:72)
                                                            
           at 
org.jasypt.properties.EncryptableProperties.decode(EncryptableProperties.java:230)
                                                                          
           at 
org.jasypt.properties.EncryptableProperties.getProperty(EncryptableProperties.java:172)
                                                                     
           at 
com.cloud.utils.db.TransactionLegacy.initDataSource(TransactionLegacy.java:1034)
                                                                            
           at 
com.cloud.utils.db.TransactionLegacy.<clinit>(TransactionLegacy.java:1008)      
                                                                            
           at com.cloud.utils.db.Merovingian2.<init>(Merovingian2.java:68)      
                                                                                
          
           at 
com.cloud.utils.db.Merovingian2.createLockController(Merovingian2.java:88)      
                                                                            
           at 
com.cloud.server.LockControllerListener.<init>(LockControllerListener.java:33)
           ... more
   Caused by: com.mysql.cj.exceptions.SSLParamsException: Cannot open file:NONE 
[NONE (No such file or directory)]                                              
         
           at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method)                                                                   
           at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
                                            
           at 
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
                                    
           ... 90 more
   Caused by: java.io.FileNotFoundException: NONE (No such file or directory)
           at java.base/java.io.FileInputStream.open0(Native Method)
           at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
           at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
           ... 90 more
   ~~~
   Upon checking, I found 
[utils/src/main/java/com/cloud/utils/crypt/DBEncryptionUtil.java#L81](https://github.com/apache/cloudstack/blob/4.16/utils/src/main/java/com/cloud/utils/crypt/DBEncryptionUtil.java#L81),
 where PBEWithMD5AndDES is not FIPS compliant. I'm concerned there are also 
other spots to check that I can't check because it doesn't build which brings 
me to the extent of my knowledge.
   
   FIPS compliance can be a stickler, because the core documentation isn't very 
clear from what I can find. I use FIPS compliant machines, but I don't 
configure them. Regarding PBEWithMD5AndDES, after a few searches, the most 
clear documentation on approved algorithms I could find was this (which is out 
of date with FIPS 140-3 existing, but probably still correct enough): 
https://csrc.nist.gov/csrc/media/projects/cryptographic-module-validation-program/documents/security-policies/140sp2261.pdf
   And additional resources that may prove useful:
   
https://github.com/jasypt/jasypt/blob/master/jasypt/src/main/java/org/jasypt/util/text/AES256TextEncryptor.java
   
https://docs.oracle.com/javase/9/docs/specs/security/standard-names.html#cipher-algorithm-names
   
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/assembly_installing-a-rhel-8-system-with-fips-mode-enabled_security-hardening
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to